![]() |
TAudioFile in der neuen Bass.dll?
Hi,
Ich habe mir diese Tutorial durch gelesen: ![]() Ich habe diese Unit nun erstellt.
Delphi-Quellcode:
Doch leider zeigt er mir ein Fehler bei TAudioFile.
unit Player_Help;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdContext, Vcl.ComCtrls, Vcl.StdCtrls, IdCustomTCPServer, IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, Vcl.Menus, Vcl.ExtCtrls, mmSystem,ClipBrd,User,Contnrs, bass, spectrum_vis ,CommonTypes; type TMeMPPlayer = class private fMainStream: DWord; fMainVolume: Single; fMainAudioFile: TAudioFile; function MeMP_CreateStream(aFilename: String): DWord; procedure SetVolume(Value: Single); function GetTime: Double; function GetProgress: Double; procedure SetProgress(Value: Double); function GetBassStatus: DWord; public property Volume: Single read fMainVolume write SetVolume; property Time: Double read GetTime; property Progress: Double read GetProgress write SetProgress; property BassStatus: DWord read GetBassStatus; constructor Create; destructor Destroy; override; procedure InitBassEngine(HND: HWND); procedure Play(aAudioFile: TAudioFile); procedure Pause; procedure Stop; procedure Resume; procedure StopAndFree; procedure SetPosition(Value: Longword); end; implementation procedure TMeMPPlayer.InitBassEngine(HND: HWND); begin if (HIWORD(BASS_GetVersion) <> BASSVERSION) then ShowMessage('Fehler'); BASS_Init(-1, 44100, 0, HND, nil); end; procedure TMeMPPlayer.Play(aAudioFile: TAudioFile); begin if aAudioFile <> NIL then begin fMainAudioFile.Assign(aAudioFile); StopAndFree; fMainstream := MeMP_CreateStream(fMainAudioFile.Pfad); BASS_ChannelSetAttribute(fMainStream, BASS_ATTRIB_VOL, fMainVolume); BASS_ChannelPlay(fMainStream , True); end; end; procedure TMeMPPlayer.StopAndFree; begin BASS_ChannelStop(fMainStream); BASS_StreamFree(fMainStream); fMainStream := 0; end; function TMeMPPlayer.MeMP_CreateStream(aFilename: String): DWord; var flags: DWORD; begin if (AnsiLowerCase(ExtractFileExt(aFilename)) = '.mp3') then flags := BASS_STREAM_PRESCAN else flags := 0; result := BASS_StreamCreateFile(False, PChar(aFilename), 0, 0, flags); end; procedure TMeMPPlayer.Pause; begin BASS_ChannelPause(fMainStream); end; procedure TMeMPPlayer.Stop; begin BASS_ChannelStop(fMainStream); end; procedure TMeMPPlayer.Resume; begin BASS_ChannelPlay(fMainStream, False); end; procedure TMeMPPlayer.SetVolume(Value: Single); begin if Value < 0 then Value := 0; if Value > 1 then Value := 1; fMainVolume := Value; BASS_ChannelSetAttribute(fMainStream, BASS_ATTRIB_VOL, fMainVolume); fMainVolume := Value; end; function TMeMPPlayer.GetTime: Double; begin if (fMainStream <> 0) then result := BASS_ChannelBytes2Seconds(fMainStream, BASS_ChannelGetPosition(fMainStream, BASS_POS_BYTE)) else result := 0; end; function TMeMPPlayer.GetProgress: Double; begin if (fMainStream <> 0) then result := BASS_ChannelGetPosition(fMainStream, BASS_POS_BYTE) / BASS_ChannelGetLength(fMainStream, BASS_POS_BYTE) else result := 0; end; procedure TMeMPPlayer.SetPosition(Value: Longword); begin BASS_ChannelSetPosition(fMainStream, Value, BASS_POS_BYTE); end; procedure TMeMPPlayer.SetProgress(Value: Double); begin if Value < 0 then Value := 0; if Value > 1 then Value := 1; SetProgress(Round(BASS_ChannelGetLength(fMainStream, BASS_POS_BYTE) * Value)); end; function TMeMPPlayer.GetBassStatus: DWord; begin result := BASS_ChannelIsActive(fMainStream); end; end. Der Autor schreibt das es mit der neuen Version der Bass.dll vieles verändert wurde. Weiß irgendjemand wie ich diesen Fehler beheben kann? Vielen Dank im voraus. |
AW: TAudioFile in der neuen Bass.dll?
Die neue Bass.dll Unterstützt Unicode und ANSI. Wenn due keine Flag setzt, meint er der Text ist ANSI. Du übergibst aber einen Unicode. Dadurch knallt es.
Änder mal den Aufruf so ab:
Delphi-Quellcode:
Gruß NickelM
function TMeMPPlayer.MeMP_CreateStream(aFilename: String): DWord;
var flags: DWORD; begin if (LowerCase(ExtractFileExt(aFilename)) = '.mp3') then //Normalerweise sollte LowerCase auch gehen. flags := BASS_STREAM_PRESCAN or BASS_UNICODE else flags := BASS_UNICODE; result := BASS_StreamCreateFile(False, PChar(aFilename), 0, 0, flags); end; |
AW: TAudioFile in der neuen Bass.dll?
Ich glaube du hast mich etwas falsch verstanden,
es startet erst gar nicht, sondern er findet den Type TAudioFile nicht. |
AW: TAudioFile in der neuen Bass.dll?
Zitat:
Leider kann ich die Classe dafür in deinem Beitrag nicht sehen und kann daher auch keine Ratschläge erteilen. Was auf anhieb schon mal stimmen muss TAudio benötigt den neuen Header also die aktuellste Unit von Bass für Delphi Wenn diese nicht implementiert ist und die version nicht stimmt wirst du auf grund dessen schon mal keinen Erfolg haben überhaupt etwas starten zu können. Du benötigst also die Bass Version welche kompatibel zu deinem Projekt ist. gruss |
AW: TAudioFile in der neuen Bass.dll?
Hast du dir das Tutorial auch komplett durchgelesen? Ich bin mir ziemlich sicher, dass die Klasse TAudioFile Bestandteil dieses Tutorials ist. Das hat nichts mit der Bass.dll zu tun, sondern ist was selbstgemachtes um die tags etc. zu lesen. ;-)
Wobei ich das TAudioFile-Gedöns mittlerweile etwas geändert habe, ![]() |
AW: TAudioFile in der neuen Bass.dll?
Zitat:
Nein das Tutorial habe ich nicht gelesen war auch nicht nötig. Nur wenn man eine Frage stellt benötigt man auch die Informationen dazu ohne auf fremden Webseiten googeln zu gehn. Woher soll man sonst wissen wie die Class TAudioFile aufgebaut ist. Und darauf bezog sich ja seine Frage ;) Nichts für ungut wollte nur helfen. gruss |
AW: TAudioFile in der neuen Bass.dll?
Meine Frage ging ja nicht an dich, sondern an CreativeMD, der anfangs behauptete, dass er das Tutorial da gelesen hätte. ;-)
Dass du das Tutorial nicht gelesen hast, ist mir relativ klar - du bist in dem Thema ja selber gut dabei, soweit ich weiß. :D |
AW: TAudioFile in der neuen Bass.dll?
Zitat:
Mein Anliegen war halt nur das ich die TAudioFile Class hätte sehen müßen um letztendlich weiterhelfen zu können. Aber scheint sich ja erledigt zu haben. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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