![]() |
Internetradio
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
ich probier gerad einige Sachen mit der Bass.dll. Hier ist ein kleines Internet-Radio auf Basis des Netradios aus den Demos entstanden: keine Visualisierung o.ä. - einfach nur Radio. ...würde mich über Anregungen und auch Senderlisten freuen. 28.04: neue Version: Senderliste ist sortierbar, Genre wurde hinzugefügt Schaltflächen geändert 29.04.; neue Version 12 Farbschemata hinzuzgefügt, 2 weitere Farbschemata sind frei konfigurierbar vorerst letzte Version (ohne Feedback?) 07.05. : neue version, WaveHeader entfernt |
Re: Internetradio
Hallo,
die vorerst letzte Version ist hochgeladen. aktuell verfügbare Einstellungen : - Hinzufügen und Entfernen von Sender-Urls - Zuweisung zu einem Genre - Sortieren der Senderliste - Auswählen aus 14 Farbschemata, davon 2 frei konfigurierbar - Aufnahme - Lautstärkeregelung (Wave-Regelung über MMSystem) |
Re: Internetradio
Darf ich fragen wie du die Aufnahme realisiert hast? Gibt's ein Tutorial dazu oder hast du den Code selber geschrieben? Darf ich das vllt haben? Werde die sehr dankbar sein, denn allein kriege ich es nicht hin. :coder2:
|
Re: Internetradio
Hallo,
beim Download der aktuellen Bass.dll (und auch älterer) sind eine Hilfedatei und 'ne ganze Menge Demos dabei, die Dir sicherlich weiterhelfen.
Delphi-Quellcode:
hier mal ein Teil meiner Unit, vielleicht hilfts, wenn nicht, kann ich Die die ganze Unit schicken,
const
Genre : array[0..21] of String = ('---', 'Klassik', 'Rock', 'Pop', 'Jazz', 'Techno', '80s', '60s', 'Trance', 'Blues', 'FreeJazz', 'Trash', 'Folk', 'Funk', 'JazzFunk', 'Soul', 'HardRock', 'Weltmusik', 'House', 'R&B', 'Reggae', 'Alternativ'); type WAVHDR = packed record riff: array[0..3] of Char; len: DWord; cWavFmt: array[0..7] of Char; dwHdrLen: DWord; wFormat: Word; wNumChannels: Word; dwSampleRate: DWord; dwBytesPerSec: DWord; wBlockAlign: Word; wBitsPerSample: Word; cData: array[0..3] of Char; dwDataLen: DWord; end; var Form1: TForm1; Proxy: array [0..99] of char; //proxy server cthread: DWORD = 0; chan: HSTREAM = 0; win: hwnd; WaveStream: TMemoryStream; WaveHdr: WAVHDR; // WAV header implementation {$R *.dfm} procedure TForm1.StartRec; begin WaveStream.Clear; // erzeuge header für die WAV-datei with WaveHdr do begin riff := 'RIFF'; len := 36; cWavFmt := 'WAVEfmt '; dwHdrLen := 16; wFormat := 1; wNumChannels := 2; dwSampleRate := 44100; wBlockAlign := 4; dwBytesPerSec := 176400; wBitsPerSample := 16; cData := 'data'; dwDataLen := 0; end; WaveStream.Write(WaveHdr, SizeOf(WAVHDR)); end; function RemoveInvalidChars(const sPDFFileName: String): String; var sFilePath, sFileName: String; i_lastBS, i : integer; begin i_lastBS := 0; for i := 1 to length(sPDFFileName) do begin if sPDFFileName[i] = '\' then begin i_lastBS := i; end; end; sFileName := copy(sPDFFileName, i_lastBS+1, length(sPDFFileName)-i_lastBS+1); sFilePath := copy(sPDFFileName, 0, i_lastBS); sFilePath := StringReplace(sFilePath, '/', '-', [rfReplaceAll, rfIgnoreCase]); sFilePath := StringReplace(sFilePath, '*', '-', [rfReplaceAll, rfIgnoreCase]); sFilePath := StringReplace(sFilePath, '?', '-', [rfReplaceAll, rfIgnoreCase]); sFilePath := StringReplace(sFilePath, '"', '-', [rfReplaceAll, rfIgnoreCase]); sFilePath := StringReplace(sFilePath, '<', '-', [rfReplaceAll, rfIgnoreCase]); sFilePath := StringReplace(sFilePath, '>', '-', [rfReplaceAll, rfIgnoreCase]); sFilePath := StringReplace(sFilePath, '|', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, '/', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, '\', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, ':', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, '*', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, '?', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, '"', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, '<', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, '>', '-', [rfReplaceAll, rfIgnoreCase]); sFileName := StringReplace(sFileName, '|', '-', [rfReplaceAll, rfIgnoreCase]); Result := sFilePath + sFileName; end; procedure TForm1.StopRec; var i: integer; WaveFile : String; FileName : String; begin if LabelTitle.Caption <> '' then WaveFile := SongFile + '.mp3' else WaveFile := 'unnamedStream'+IntToStr(Sn) + '.mp3'; ListForm.FileList.Items.Add(WaveFile); // WAV-Header vervollständigen WaveStream.Position := 4; i := WaveStream.Size - 8; WaveStream.Write(i, 4); i := i - $24; WaveStream.Position := 40; WaveStream.Write(i, 4); WaveStream.Position := 0; FileName := RemoveInvalidChars((SongDir+Genre[StrToInt(SenderList[SenderIndex *3])] +'\'+WaveFile)); if not FileExists(FileName) then try WaveStream.SaveToFile(FileName); except end; SaveStatus := True; if RecordStatus then begin {neue Aufnahme} WaveFile := ''; StartRec; end; end; musst sie dann nur noch ggf. graphisch anpassen. ........ ja, ja, ich weiß: das mit RemoveInvalidChars bekommt man elegenter hin, aber es laüft so schon seit meiner Delphi-Anfangszeit >>>> never change a winning team(function). |
Re: Internetradio
Zitat:
Wenn man mit nem Hex-Editor die ersten paar Bytes aus der Datei löscht, und den Wave-Header damit unbrauchbar macht, greift die "MPEG-Frame-Header-Suche", die bei mp3-Dateien angewendet werden sollte, und die Datei wird abspielbar. Lösung für dich: Lass das Wave-Gedöns, was du hier auch grade gepostest hast, einfach weg. Dann klappt es zumindest mit mp3-Streams, bei ogg geht das leider nicht. |
Re: Internetradio
Gausi perfektioniere doch den Aufnahme Code, am besten gleich hier :thumb:
|
Re: Internetradio
Zitat:
![]() |
Re: Internetradio
Hallo
ich hab das Problem erst mal damit gelöst, alle Dateien, die aufgenommen werden, durch die Lame.Exe laufen zu lassen - zugegeben, auch keine elegante Lösung. Letztendlich werd ich wohl erst mal abfragen müssen, wie die Streams kodiert sind und dann explizit behandeln. |
Re: Internetradio
Zitat:
Delphi-Quellcode:
Da werden die empfangenen Daten in die Datei geschrieben. Da muss man nix durch Lame schicken. Einfach die Daten schreiben. Und den ganzen Kram mit dem WaveHdr einfach weglassen. Das sind dann mp3s, die einfach und problemlos abgespielt werden können. ;-)
procedure StatusProc(buffer: Pointer; length: DWORD; user: Pointer); stdcall;
begin ... MyRecordStream.Write(buffer^, length); ... end; Die paar Streams, die im ogg-Format senden (aac+ oder wma gehen ja hiermit sowieso nicht), kann man fürs erste doch ignorieren, später kann man dann die Formaterkennung dazubauen. |
Re: Internetradio
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz