Audioausgabe Problem mit Umlauten

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
wennerer
Beiträge: 515
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Audioausgabe Problem mit Umlauten

Beitrag von wennerer »

Hallo,
ich bin gerade dabei für mich selbst einen kleinen Vokabeltrainer zuschreiben. Ich arbeite mit Linux Ubuntu 14.04. Die Sprachausgabe der Vokabel ist mir mit der Bass Audio Library gelungen. Hierfür gibt es im Netz ja jedemenge super Artikel aus denen ich mir einen minimal Code zusammen gebastelt habe. Ist nix für Profis, brauchte aber nur eine Möglichkeit um eine mp3 abzuspielen (und sonst nix).
Mein Problem ist jetzt das ich das Programm auch auf meinen alten Laptop mit Windows XP nutzen möchte. Ich habe die libbass.so durch die bass.dll ersetzt und unter XP compiliert. Soweit so gut leider funktioniert jetzt die Audioausgabe nur noch wenn im Pfad kein Umlaut vorkommt. Kann mir irgend jemand sagen was ich da machen kann?
Hier noch mein minimal Code für Linux. Wer es probieren will muss die libbass.so ins Verzeichnis usr/lib kopieren, die bass.pas und eine AudioDatei.mp3 ins Arbeitsverzeichnis. In meinem Vokabelprogramm steht natürlich eine Variable mit dem Pfad. Ich denk mal das irgendwas mit dem PChar schiefläuft?

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  bass;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1       : TForm1;
  fMainstream : DWord;
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Bass_Init(-1,44100,Bass_Device_CPSpeakers,Nil,Nil);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  BASS_StreamFree(fMainStream); //geht auch ohne, verhindert gleichzeitiges abspielen
  fMainstream:=Bass_StreamCreateFile(False,PChar('AudioDatei.mp3'),0,0,0);
  Bass_ChannelPlay(fMainStream,true);
end;
 
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  BASS_StreamFree(fMainStream);
end;
 
end.
 

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Audioausgabe Problem mit Umlauten

Beitrag von Michl »

Ich habe das mal bei mir getestet. Nehme ich ein Widestring und setze das Flag entsprechend geht es bei mir:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  SoundStream: HSTREAM;
  FileName: String;
begin
  FileName := '.öü\Notify.wav';
  SoundStream := BASS_StreamCreateFile(False, PChar(UTF8Decode(FileName)), 0, 0, BASS_UNICODE);
//  SoundStream := BASS_StreamCreateFile(False, @WideString(FileName)[1], 0, 0, BASS_UNICODE);  //unter Lazarus mit FPC 3.0.0 gänge auch das
  if SoundStream <> 0 then
    BASS_ChannelPlay(SoundStream, False);
end;

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

wennerer
Beiträge: 515
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Audioausgabe Problem mit Umlauten

Beitrag von wennerer »

Hallo Michl,
vielen Dank für deine Antwort. Ich habs natürlich gleich mal probiert und hurra es funktioniert auch bei mir!
Vielen, vielen Dank nochmal!
posting.php?mode=reply&f=25&t=9459#

Antworten