AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia TAudioFile in der neuen Bass.dll?
Thema durchsuchen
Ansicht
Themen-Optionen

TAudioFile in der neuen Bass.dll?

Ein Thema von CreativeMD · begonnen am 20. Jun 2012 · letzter Beitrag vom 21. Jun 2012
Antwort Antwort
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#1

TAudioFile in der neuen Bass.dll?

  Alt 20. Jun 2012, 17:43
Hi,

Ich habe mir diese Tutorial durch gelesen: http://www.delphi-treff.de/tutorials...t-der-bassdll/.

Ich habe diese Unit nun erstellt.

Delphi-Quellcode:
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.
Doch leider zeigt er mir ein Fehler bei TAudioFile.
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.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

AW: TAudioFile in der neuen Bass.dll?

  Alt 20. Jun 2012, 18:04
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:
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;
Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von CreativeMD
CreativeMD

Registriert seit: 11. Okt 2011
127 Beiträge
 
Delphi XE2 Architect
 
#3

AW: TAudioFile in der neuen Bass.dll?

  Alt 20. Jun 2012, 19:54
Ich glaube du hast mich etwas falsch verstanden,
es startet erst gar nicht, sondern er findet den Type TAudioFile nicht.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: TAudioFile in der neuen Bass.dll?

  Alt 20. Jun 2012, 21:18
Ich glaube du hast mich etwas falsch verstanden,
es startet erst gar nicht, sondern er findet den Type TAudioFile nicht.
Um da helfen zu können müßte man erstmal wissen was TAudioFile ist.
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

Geändert von EWeiss (20. Jun 2012 um 21:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TAudioFile in der neuen Bass.dll?

  Alt 20. Jun 2012, 21:24
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, das hier ist ziemlich idiotensicher, wenn man nur die Basis-Informationen aus (fast) beliebigen Audiofiles lesen/schreiben möchte.
The angels have the phone box.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: TAudioFile in der neuen Bass.dll?

  Alt 20. Jun 2012, 21:27
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, das hier ist ziemlich idiotensicher, wenn man nur die Basis-Informationen aus (fast) beliebigen Audiofiles lesen/schreiben möchte.
Ach so das stammt von dir..
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
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TAudioFile in der neuen Bass.dll?

  Alt 20. Jun 2012, 21:41
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ß.
The angels have the phone box.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: TAudioFile in der neuen Bass.dll?

  Alt 21. Jun 2012, 01:25
Zitat:
Dass du das Tutorial nicht gelesen hast, ist mir relativ klar - du bist in dem Thema ja selber gut dabei, soweit ich weiß.
Jo geht so

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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz