• R/O
  • SSH
  • HTTPS

id3v2editorplus: Commit


Commit MetaInfo

Revision27 (tree)
Time2019-09-13 06:59:05
Authorderekwildstar

Log Message

- Coisas de mais pra comentar (preguiça)

Change Summary

Incremental Difference

--- trunk/V2/src/UBassUtils.pas (revision 26)
+++ trunk/V2/src/UBassUtils.pas (revision 27)
@@ -4,12 +4,12 @@
44
55 procedure BASSReproduzir(ADoComeco: Boolean = True);
66 procedure BASSPararReproducao;
7-procedure BASSCarregarStream(AArquivoMP3: String; out ATempoTotal: TTime);
7+procedure BASSCarregarStream(AArquivoMP3: String; out ATempoTotal: Word);
88 procedure BASSInicializar(AManipulador: THandle);
99 procedure BASSFinalizar;
1010 procedure BASSDescarregarStream;
1111 function BASSEstaReproduzindo: Boolean;
12-function BASSTempoDecorrido: TTime;
12+function BASSTempoDecorrido: Word;
1313
1414 implementation
1515
@@ -33,7 +33,9 @@
3333 raise Exception.CreateFmt('A biblioteca BASS não foi capaz de parar a reprodução do arquivo. Código de erro %d',[BASS_ErrorGetCode]);
3434 end;
3535
36-procedure BASSCarregarStream(AArquivoMP3: String; out ATempoTotal: TTime);
36+procedure BASSCarregarStream(AArquivoMP3: String; out ATempoTotal: Word);
37+var
38+ Segundos: Double;
3739 begin
3840 StreamDaMusica := BASS_StreamCreateFile(False, PChar(AArquivoMP3), 0, 0, BASS_STREAM_PRESCAN or BASS_UNICODE);
3941
@@ -45,10 +47,12 @@
4547 if TempoTotalEmBytes = -1 then
4648 raise Exception.CreateFmt('A biblioteca BASS não foi capaz de obter a duração total da música. Código de erro %d',[BASS_ErrorGetCode]);
4749
48- ATempoTotal := BASS_ChannelBytes2Seconds(StreamDaMusica, TempoTotalEmBytes);
50+ Segundos := BASS_ChannelBytes2Seconds(StreamDaMusica, TempoTotalEmBytes);
4951
50- if ATempoTotal < 0 then
51- raise Exception.CreateFmt('A biblioteca BASS não foi capaz de converter a duração total da música de Bytes para segundos. Código de erro %d',[BASS_ErrorGetCode]);
52+ if Segundos < 0 then
53+ raise Exception.CreateFmt('A biblioteca BASS não foi capaz de converter a duração total da música de Bytes para segundos. Código de erro %d',[BASS_ErrorGetCode])
54+ else
55+ ATempoTotal := Round(Segundos);
5256 end;
5357
5458 procedure BASSInicializar(AManipulador: THandle);
@@ -76,12 +80,12 @@
7680 Result := (StreamDaMusica > 0) and (BASS_ChannelIsActive(StreamDaMusica) = BASS_ACTIVE_PLAYING);
7781 end;
7882
79-function BASSTempoDecorrido: TTime;
83+function BASSTempoDecorrido: Word;
8084 begin
8185 Result := 0;
8286
8387 if StreamDaMusica > 0 then
84- Result := BASS_ChannelBytes2Seconds(StreamDaMusica, BASS_ChannelGetPosition(StreamDaMusica,BASS_POS_BYTE));
88+ Result := Round(BASS_ChannelBytes2Seconds(StreamDaMusica, BASS_ChannelGetPosition(StreamDaMusica,BASS_POS_BYTE)));
8589 end;
8690
8791 end.
--- trunk/V2/src/UClassesETipos.pas (revision 26)
+++ trunk/V2/src/UClassesETipos.pas (revision 27)
@@ -62,7 +62,7 @@
6262 end;
6363
6464 TSYLTVerso = record
65- Tempo: TTime;
65+ Tempo: Cardinal;
6666 Texto: String;
6767 end;
6868
@@ -93,7 +93,9 @@
9393 private
9494 FIndice: SmallInt;
9595
96- FSaida: TLabel;
96+ FSaidaAnterior: TLabel;
97+ FSaidaCentral: TLabel;
98+ FSaidaPosterior: TLabel;
9799 FIdioma: TComboBox;
98100 FFormatoDoRotuloDeTempo: TComboBox;
99101 FTipoDeConteudo: TComboBox;
@@ -112,7 +114,7 @@
112114 function GetItem(AIndex: Integer): TSYLTItem;
113115 procedure SetItem(AIndex: Integer; const AValue: TSYLTItem);
114116 public
115- constructor Create(ASaida: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
117+ constructor Create(ASaidaAnterior: TLabel; ASaidaCentral: TLabel; ASaidaPosterior: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
116118
117119 procedure Limpar;
118120 function Add: TSYLTItem; overload;
@@ -120,12 +122,11 @@
120122 procedure SYLTAnterior(APrimeira: Boolean = False);
121123 procedure ProximaSYLT(AUltima: Boolean = False);
122124 procedure SalvarLetraComo(ACaixaDeDialogoParaSalvarLetra: TSaveDialog);
123- procedure ExibirVerso(ARotuloDeTempo: TTime);
125+ procedure ExibirVerso(ASegundos: Word);
124126
125127 property Items[AIndex: Integer]: TSYLTItem read GetItem write SetItem; default;
126128 end;
127129
128-
129130 implementation
130131
131132 uses
@@ -243,7 +244,7 @@
243244
244245 FWebBrowser.Navigate2('about:blank');
245246 FDescricao.Clear;
246- FIdioma.ItemIndex := 0;
247+ FIdioma.ItemIndex := 364;
247248 FContador.Caption := '0 / 0';
248249 FContadorSombra.Caption := '0 / 0';
249250
@@ -325,13 +326,6 @@
325326 FContadorSombra.Caption := FContador.Caption;
326327 FDescricao.Enabled := FSalvarUSLT.Enabled;
327328 FIdioma.Enabled := FSalvarUSLT.Enabled;
328-
329- if Count = 0 then
330- begin
331- FWebBrowser.Navigate2('about:blank');
332- FDescricao.Clear;
333- FIdioma.ItemIndex := 0;
334- end;
335329 end;
336330
337331 procedure TUSLT.ExibirLetra(AIndiceDaLetra: Word);
@@ -462,7 +456,7 @@
462456 // Após i, existem 4 bytes que representam o timestamp, estes bytes
463457 // encontram-se em um endianess diferente, por isso precisamos trocar
464458 // sua ordem para interpretar o valor corretamente
465- Verso.Tempo := SwapEndian32(PDWORD(@ABytes[i+1])^) / 1000 / 86400;
459+ Verso.Tempo := SwapEndian32(PDWORD(@ABytes[i+1])^);
466460
467461 // Adiciona o verso e seu rótulo de tempo no conteúdo deste SYLT.
468462 FConteudo.Add(Verso);
@@ -499,7 +493,7 @@
499493 // corretamente. Abaixo, somamos i + 2 para nos posicionar no primeiro
500494 // dos quatro bytes de timestamp. Isso é necessário porque i está
501495 // apontando para o primeiro byte zero do teminador UNICODE
502- Verso.Tempo := SwapEndian32(PDWORD(@ABytes[i + 2])^) / 1000 / 86400;
496+ Verso.Tempo := SwapEndian32(PDWORD(@ABytes[i + 2])^);
503497
504498 // Adiciona o verso e seu rótulo de tempo no conteúdo deste SYLT.
505499 FConteudo.Add(Verso);
@@ -559,15 +553,6 @@
559553 FIdioma.Enabled := FSalvarSYLT.Enabled;
560554 FFormatoDoRotuloDeTempo.Enabled := FSalvarSYLT.Enabled;
561555 FTipoDeConteudo.Enabled := FSalvarSYLT.Enabled;
562-
563- if Count = 0 then
564- begin
565- ///////////// Limpar o controle que mostra na tela o sylt
566- //FWebBrowser.Navigate2('about:blank');
567- ////////// Limpar outros controles associados
568- //FDescricao.Text := '';
569- //FIdioma.ItemIndex := 0;
570- end;
571556 end;
572557
573558 procedure TSYLT.ConfirmarInformacoesDaLetra;
@@ -587,12 +572,14 @@
587572 end;
588573 end;
589574
590-constructor TSYLT.Create(ASaida: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
575+constructor TSYLT.Create(ASaidaAnterior: TLabel; ASaidaCentral: TLabel; ASaidaPosterior: TLabel; AIdioma: TComboBox; AFormatoDoRotuloDeTempo: TComboBox; ATipoDeConteudo: TComboBox; ADescricao: TLabeledEdit; AProximaSYLT: TAction; SYLTTAnterior: TAction; ASalvarSYLT: TAction; ARemoverSYLT: TAction; ASubstituirSYLT: TAction; AContador: TLabel; AContadorSombra: TLabel);
591576 begin
592577 inherited Create(TSYLTItem);
593578 FIndice := -1;
594579
595- FSaida := ASaida;
580+ FSaidaAnterior := ASaidaAnterior;
581+ FSaidaCentral := ASaidaCentral;
582+ FSaidaPosterior := ASaidaPosterior;
596583 FIdioma := AIdioma;
597584 FFormatoDoRotuloDeTempo := AFormatoDoRotuloDeTempo;
598585 FTipoDeConteudo := ATipoDeConteudo;
@@ -626,6 +613,7 @@
626613 Self.FIdioma.ItemIndex := Self.FIdioma.Items.IndexOf(LanguageIDtoString(Idioma));
627614 Self.FFormatoDoRotuloDeTempo.ItemIndex := Pred(FormatoDoRotuloDeTempo);
628615 Self.FTipoDeConteudo.ItemIndex := TipoDeConteudo;
616+ ExibirVerso(0);
629617 finally
630618 Self.FDescricao.OnChange := OnChangeOriginal;
631619 Self.FIdioma.OnChange := OnChangeOriginal;
@@ -638,16 +626,25 @@
638626 AtualizarEstadoDosComponentesDeSaida;
639627 end;
640628
641-procedure TSYLT.ExibirVerso(ARotuloDeTempo: TTime);
629+procedure TSYLT.ExibirVerso(ASegundos: Word);
642630 begin
643- converter para segundo anstes de usar
644631 if (FIndice = -1) or (Items[FIndice].Conteudo.Count = 0) then
645632 Exit;
646633
647- for var Verso: TSYLTVerso in Items[FIndice].Conteudo do
648- if Verso.Tempo = ARotuloDeTempo then
634+ for var i: Word := 0 to Pred(Items[FIndice].Conteudo.Count) do
635+ if Items[FIndice].Conteudo[i].Tempo = ASegundos * 1000 then
649636 begin
650- FSaida.Caption := Verso.Texto;
637+ FSaidaAnterior.Caption := '####### INÍCIO #######';
638+ FSaidaPosterior.Caption := '######## FIM ########';
639+
640+ FSaidaCentral.Caption := Items[FIndice].Conteudo[i].Texto;
641+
642+ if i > 0 then
643+ FSaidaAnterior.Caption := Items[FIndice].Conteudo[i - 1].Texto;
644+
645+ if i < Pred(Items[FIndice].Conteudo.Count) then
646+ FSaidaPosterior.Caption := Items[FIndice].Conteudo[i + 1].Texto;
647+
651648 Break;
652649 end;
653650 end;
@@ -661,9 +658,15 @@
661658 begin
662659 Clear;
663660 FIndice := -1;
664- /////////////// Limpar o controle que mostra na tela o sylt
665- //FWebBrowser.Navigate2('about:blank');
666661
662+ FSaidaAnterior.Caption := '';
663+ FSaidaCentral.Caption := '';
664+ FSaidaPosterior.Caption := '';
665+ FDescricao.Clear;
666+ FIdioma.ItemIndex := 364;
667+ FFormatoDoRotuloDeTempo.ItemIndex := 1;
668+ FTipoDeConteudo.ItemIndex := 1;
669+
667670 AtualizarEstadoDosComponentesDeSaida;
668671 end;
669672
--- trunk/V2/src/UDAMOPrincipal.pas (revision 26)
+++ trunk/V2/src/UDAMOPrincipal.pas (revision 27)
@@ -98,7 +98,7 @@
9898 FID3v1Tag: TID3v1Tag;
9999 FID3v2Tag: TID3v2Tag;
100100 FIndiceDoArquivoAtual: SmallInt;
101- FTempoTotalDoArquivoAtual: TTime;
101+ FTempoTotalDoArquivoAtual: Word;
102102 FPosicaoHorizontalDoLetreiro: SmallInt;
103103 FPosicaoVerticalDoLetreiro: Byte;
104104 FMudouAutomaticamente: Boolean;
@@ -235,7 +235,7 @@
235235
236236 function TDAMOPrincipal.ReproducaoConcluida: Boolean;
237237 begin
238- Result := CompareValue(BASSTempoDecorrido,FTempoTotalDoArquivoAtual) >= 0;
238+ Result := BASSTempoDecorrido >= FTempoTotalDoArquivoAtual;
239239 end;
240240
241241 procedure TDAMOPrincipal.Reproduzir;
@@ -555,7 +555,9 @@
555555 ,TFORMPrincipal(Owner).LABEUSLT
556556 ,TFORMPrincipal(Owner).LABEUSLTSombra);
557557
558- FSYLT := TSYLT.Create(TFORMPrincipal(Owner).LABESYLT
558+ FSYLT := TSYLT.Create(TFORMPrincipal(Owner).LABESYLTA
559+ ,TFORMPrincipal(Owner).LABESYLTB
560+ ,TFORMPrincipal(Owner).LABESYLTC
559561 ,TFORMPrincipal(Owner).CMBXIdiomaSYLT
560562 ,TFORMPrincipal(Owner).CMBXFormatoDoRotuloDeTempoSYLT
561563 ,TFORMPrincipal(Owner).CMBXTipoDeConteudoSYLT
@@ -893,7 +895,7 @@
893895
894896 procedure TDAMOPrincipal.AtualizarTempoDecorrido(AZero: Boolean = False);
895897 var
896- Atual: Double;
898+ Atual: Word;
897899 begin
898900 Atual := 0;
899901
@@ -921,6 +923,7 @@
921923 begin
922924 AtualizarTempoDecorrido;
923925
926+ verificar se a bass retorna milissegundos
924927 // O timer só estará em execução se houver uma reprodução em andamento,
925928 // portanto podemos, com segurança, verificar se precisamos passar para uma
926929 // próxima música apenas verificando se a reprodução atual foi concluída
--- trunk/V2/src/UFORMPrincipal.pas (revision 26)
+++ trunk/V2/src/UFORMPrincipal.pas (revision 27)
@@ -114,7 +114,10 @@
114114 CMBXTipoDeConteudoSYLT: TComboBox;
115115 LABETipoDeConteudoSYLT: TLabel;
116116 SHAPSYLT: TShape;
117- LABESYLT: TLabel;
117+ LABESYLTA: TLabel;
118+ LABESYLTB: TLabel;
119+ LABESYLTC: TLabel;
120+ Shape1: TShape;
118121 procedure PABOLetreiroPaint(Sender: TObject);
119122 procedure IMAGID3v2Click(Sender: TObject);
120123 procedure ID3v1Modificado(Sender: TObject);
Show on old repository browser