![]() |
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:
|
Re: Internetradio
neue Version ist im ersten Beitrag: der WaveHeader ist nun entfernt
|
Re: Internetradio
Hallo,
muss sagen ein schönes Programm. Nur wie sieht es aus, wenn ich das Farbschema änder, danach wieder auf das ursprüngliche zu gelangen. er bleibt bei mir beim letzten schema stehen und fängt nicht von vorne an. und wie fühe ich neue sender ein. z.b. ![]() Gruß S4SH |
Re: Internetradio
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo, S4SH1981
das Farbschema Nr. 13 und Nr. 14 änderst Du mit der Taste "C" - rechts oben. Über die Pfeiltasten (Up / Down) kannst Du zwischen den Farbschemata navigieren. Das eingestellte Farbschema bleibt so lange bestehen, wie es nicht über die Pfeiltasten geändert wird, also auch, wenn Du ein Farbschema Nr. 13 oder 14 erstellt hast, musst Du noch dahin navigieren. bei den Farben war evt. noch ein Fehler vorhanden, aktualisierte Version ist hochgeladen Für das Hinzufügen neuer Sender, betätige die Taste "+" unter der Lautstärkeregelung. In einenm neuen Fenster kannst Du nun den Url eingeben und testen bzw. mit speichern übernehmen. |
Re: Internetradio
okay, mit dem farbschema funktioniert. hast ja auf dem foto im anhang nen schönen kreis drum gemacht.
aber mit den urls hinzufügen geht nicht, zumindest nicht mit ![]() bei dem beispiel in den demos von bass gehts? |
Re: Internetradio
Hallo,
es wird mit einigen Urls bzw. Stream-Formaten nicht gehen. Für 20 funktionierende Streams hab' ich ca. 50 ausprobiert. Es findet auch keine Kodierungserkennung im Programm statt - vielleicht setz ich das noch mal um. |
Re: Internetradio
Hallo Markus,
das Programm interessierte mich, weil ich einen Stream zeitgesteuert aufnehmen möchte. Allerdings bin ich gescheitert, weil "mein" Sender nicht abgespielt werden kann. Unter ![]() ![]() ![]() ![]() mms://stream2.rbb-online.de/wmtencoder/kulturradio-live.wma für Internet-Radios Aber bei jeder dieser Varianten meldet dein Programm sofort: Zitat:
Übrigens vermisse ich die Möglichkeit, einen vorhandenen Sender zu ändern und die Liste nach "Genre" zu sortieren. Gruß Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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