bass.dll frage zu datei speichern

  • also wenn ich das richtig verstehe kann ich mit dieser dll nicht direkt eine datei speichern, nur streamen und den stream aus dem speicher in eine datei schreiben ?
    z.b. datei im internet streamen, anhören, beim anhören den speicher kopieren bis lied zuende ist.
    speicher als wav datei speichern oder zu mp3 mit lame umwandeln lassen ?
    das ganze ohne anhören zu machen geht nicht ?

    habe leider nur ein tutorial in delphi dazu gefunden: Link zum Tutorial

    zumindest versteh ich das dort geschriebene so ?

    edit:
    alles zu umständlich und noch zu wenig ahnung von, mache das lieber so wie ich auch weiss was ich mache.
    also download nun über tcp, funzt :thumbup:
    möchte aber doch die download funktion mit schicker progressbar in meinem programm nutzen und eine lösung finden.

    2 Mal editiert, zuletzt von HobbyCoder (18. September 2011 um 17:25)

  • Hab gar nicht mehr gewusst, daß ich die MemoryBuffer-Funktion bereits in die DownloadProc integriert hatte... :whistling:

    so gehts:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_UseX64=n
    #include "Bass.au3"
    #include "BassExt.au3"

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{ESC}", "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    _BASS_Startup()
    _BASS_Ext_Startup()
    _BASS_Init(0, -1, 44100, 0, "")

    [/autoit] [autoit][/autoit] [autoit]

    $tBuffer = DllStructCreate("byte[10000000]")
    $pBuffer = DllStructGetPtr($tBuffer)
    $iBuffer = DllStructGetSize($tBuffer)

    [/autoit] [autoit][/autoit] [autoit]

    $aMP3Buffer = _BASS_EXT_MemoryBufferCreate()

    [/autoit] [autoit][/autoit] [autoit]

    $hStream = _BASS_StreamCreateURL("http://dc370.4shared.com/img/777213322/c38560ec/dlink__2Fdownload_2F2v7poYoy_3Ftsid_3D20110910-35650-7cd66ec0/preview.mp3", _
    0, $BASS_STREAM_DECODE, $BASS_EXT_DownloadProc, $aMP3Buffer[0]) ;use callback function from bassext.dll

    [/autoit] [autoit][/autoit] [autoit]

    $iLength = _BASS_ChannelGetLength($hStream, $BASS_POS_BYTE)
    $iBytes = 0

    [/autoit] [autoit][/autoit] [autoit]

    While $iBytes < $iLength
    $iBytes += _BASS_ChannelGetData($hStream, $pBuffer, $iBuffer)
    ToolTip(Round($iBytes * 100 / $iLength, 1) & "%" & @CRLF & "MP3 Daten in Buffer: " & Round(_BASS_EXT_MemoryBufferGetSize($aMP3Buffer) / 1024, 1) & "KB")
    Sleep(500)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    $iSize = _BASS_EXT_MemoryBufferGetSize($aMP3Buffer)
    $bMP3Data = _BASS_EXT_MemoryBufferGetData($aMP3Buffer, $iSize)

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen(@ScriptDir & "\Download.mp3", 18)
    FileWrite($hFile, $bMP3Data)
    FileClose($hFile)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _Exit()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _BASS_StreamFree($hStream)
    _BASS_EXT_MemoryBufferDestroy($aMP3Buffer)
    _BASS_Free()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    E

  • oh wow du bist auch direkt der author der dll.
    dachte das war nur ein zufall mit dem namen im englischen board *schäm*

    dann möchte ich mich bei der gelegenheit bei dir bedanken, auch im namen meiner freundin.
    ohne die dll und die funktionen könnte ich als *hust* hobby coder meinen mp3 sucher gar nicht so schön erstellen.
    schon sehr einfach, sich direkt als stream die musik anhören und wenn sie gefällt, speichern.
    glaubst gar nicht wie oft ich schon aus meiner richtigen arbeit (php knecht) rausgerissen wurde, weil sie irgend ein lied aus dem radio oder so gesucht hat und ich dann suchen durfte :wacko:
    nun kann sie selber über mp3skull suchen, sich das anhören und dann halt speichern, zum großteil dank deiner arbeit :thumbup:

    danke auch das du dir noch mal die mühe gemacht hast, nach einer lösung zu schauen!

  • Dann ein herzliches "Danke Schön" an euch drei und das Team von Un4Seen :)

    Da beim speichern der Datei aus dem Speicher die ID3 Tags verloren gehen, hab ich zunächst eine Lösung gesucht wie ich diese von einem Stream bekomme.
    Bin da wohl an ein veraltetes Beispiel geraten und hatte dazu hier dann ein paar Fragen gestellt.
    Hab nun den richtigen Weg mit der BassTAGS.dll gefunden und kurz getestet, geht auch mit einer Datei aus dem Internet *juhu*

    Werd also nun den ID3 Tag auslesen, die Datei auf deine Art speichern und dann den ID3 Tag erstellen.
    Beim TCP Downloaden alles nicht nötig, aber macht Spaß nur die Funktionen in der Bass.dll zu verwenden :thumbup:

    Einmal editiert, zuletzt von HobbyCoder (19. September 2011 um 17:20) aus folgendem Grund: die richtige funktion dazu gefunden