Hi, ich habe gerade ein Softwareprojekt in einer c-ähnlichen Programmiersprache. Mein Ziel ist es, Zahlen wie 1.3453 oder 3564 als Sound auszugeben. Ich habe bereits folgende wav-Files mit einzelnen Ziffern erstellt: 1-12, 20, 30, zig, hundert, tausend, und, komma, punkt und eine entsprechende Logik zum "zusammensetzen" dieser Wav-Files für die Ausgabe. Leider ist es in meiner Programmiersprache nur möglich EIN wav-File abzuspielen und das Programm läuft dann weiter ODER ein wav-File abzuspielen x-Sekunden zu schlafen (Sleep(400)) bis der Text gesagt wurde und dann das nächste File mit PlaySound("zwei.wav") zu starten. Da der zweite Weg unmöglich ist und ich Funktionen einer dll aufrufen/ausführen kann, muss ich mir die Audioausgabe irgendwie über eine dll ermöglichen. Ich habe sowas noch nie gemacht. Habt Ihr hier einen Tipp für mich, wie (welche Programmiersprache) ich hier am besten vorgehe oder ob es sowas vielleicht schon fertig gibt?
Wenn du noch nicht so gut drauf bist, bleibt immer noch die Möglichkeit, die Länge jedes WAV-Files mit einer Stoppuhr zu ermittlen und die Play-Sleep Methode anzuwenden. > Da der zweite Weg unmöglich ist Aus welchem Grund? Wenn mehr in deiner Progtrammiersprache nicht geht, dann geht eben nicht mehr. Alternativ könnte man auch die jeweils benötigten WAV-Files in ein neues temporäres File zusammenkopieren (das WAV-Format ist nicht besonders schwer zu lesen oder zu schreiben), und dann das Ergebnis abzuspielen. > .... ich hier am besten vorgehe .... Ja, das kennen wir schon. 'am besten vorgehen' heisst meistens: kann das wer für mich machen - biiiittteee.
:
Bearbeitet durch User
Man könnte ja auch ein temporäres wav-File entsprechend der auszugebenden Zahl aus den einzelnen Ziffern zusammenkopieren, und das dann ausgeben. Ob deine ominöse Programmiersprache so etwas zulässt, keine Ahnung, musst du halt selber rausfinden. Oliver
1. Ich kann wav-Files nur einzeln abspielen, zusammensetzten temporär geht in meiner Software nicht. 2. Das mit der Stopuhr wäre eine Möglichkeit und ich könnte auch eine Fkt schreiben, dass nach aufruf der "eins.wav" 600ms gewartet und nach "drei.wav" 800ms gewartet werden muss. Allerdings sehe ich dies als ziemlich umständlich an und mein Programm kann wärend der ganzen Prozedur nicht weiterarbeiten und auch nicht auf Eingaben von außen reagieren :-( 3. Threads gehen hier nicht. 4. Ich möchte nicht betteln und auch nicht, dass es wer von euch macht, bzw. wenn wer Ahnung hat und das könnte, würde ich ihm dafür auch was zahlen... Ich richte mich an euch als Leute, die wesentlich mehr Erfahrung haben und vielleicht einen (Aus)weg sehen, den ich nicht kenne.
H. C. schrieb: > Ich habe bereits folgende wav-Files mit einzelnen Ziffern erstellt: > 1-12, 20, 30, zig, hundert, tausend, und, komma, punkt > und eine entsprechende Logik zum "zusammensetzen" dieser Wav-Files für > die Ausgabe. Bei Windows CE gibt es z.B. die Funktion "sndPlaySound", der Du neben dem abzuspielenden Dateinamen noch einen Parameter mitgeben kannst, z.B.: > SND_ASYNC The sound is played asynchronously and PlaySound returns > immediately after beginning the sound. oder > SND_SYNC Synchronous playback of a sound event. PlaySound > returns after the sound event completes. Hast Du schon mal geschaut, ob Dein Software-API außer der von Dir genannten Funktion noch eine andere Soundabspielfunktion hat, die zusätzlich zum Dateinamen weitere Parameter nimmt? Ansonsten: Zu jedem Sound die Abspieldauer ermitteln und Deinen Abspielalgorithmus so ändern, dass nach dem Aufruf jedes Sounds die Mindestpause + Reserve als Delay gemacht wird. Oder verraten, um welches Betriebssystem und welche Programmiersprache es geht. Vielleicht kennt ja jemand Deine "C-ähnliche Programmiersprache".
H. C. schrieb: > zusammensetzten temporär > geht in meiner Software nicht. Glaube ich schlicht nicht. Was ist das denn jetzt genau für eine Software? Oliver
bisher weisst nur DU um welche Programmiersprache es geht und was man damit machen kann. Welche Hinweise erwartest du also mit so wenig Information für potentielle Helfer?
H. C. schrieb: > Leider ist es in meiner Programmiersprache nur möglich > EIN wav-File abzuspielen und das Programm läuft dann weiter H. C. schrieb: > ODER > ein wav-File abzuspielen x-Sekunden zu schlafen (Sleep(400)) bis der > Text gesagt wurde und dann das nächste File mit PlaySound("zwei.wav") zu > starten. > > Da der zweite Weg unmöglich ist H. C. schrieb: > zusammensetzten temporär > geht in meiner Software nicht. H. C. schrieb: > und mein Programm > kann wärend der ganzen Prozedur nicht weiterarbeiten und auch nicht auf > Eingaben von außen reagieren :-( H. C. schrieb: > 3. Threads gehen hier nicht. Vielleicht solltest du besser die Dinge aufzählen, die in dieser C-ähnliche Programmiersprache GEHEN ;-) ... oder von der C-ähnlichen Sprache in eine C-gleiche Sprache wechseln. Damit geht nämlich (ggf. mit Unterstützung durch das Betriebssystem) fast alles.
:
Bearbeitet durch Moderator
Warum bekomme ich schlechte Wertungen von euch? Ich möchte nicht, dass ihr für mich die Arbeit erledigt und nach Anregungen zu fragen- dafür wird ein Forum wohl da sein. Und das ich Schreibe C-ähnliche Sprache kann mir doch auch nicht angekreidet werden, denn was hilft es euch, wenn es um eine leicht abgeänderte Programmiersprache nenne, die sowieso keiner kennt und für die es auch keine Dokumentation gibt. Mein eigentliches Problem habe ich geschildert und hat damit nichts zu tun. @Jürgen S. Vielen Dank für den Tipp!!!! Das wäre ja super-interessant. Ich kann nämlich Funktionen einer dll aufrufen. So wie ich es sehe, kann ich der Funktion sndPlaySound mit SND_SYNC mitgeben, dass er die Files synchron also nacheinander abspielt?! Kann ich die Soundfiles dann wie folgt abspielen
1 | sndPlaySound("eins.wav",SND_SYNC); |
2 | sndPlaySound("punkt.wav",SND_SYNC); |
3 | sndPlaySound("vier.wav",SND_SYNC); |
und mich nicht mehr um die Abspieldauer der einzelnen Files kümmern? Die Funktion gibt es in der winmm.dll, diese hab ich nicht auf meinem PC. Wo kann ich sie am besten runterladen?
H. C. schrieb: > SND_SYNC H. C. schrieb: > und mein Programm > kann wärend der ganzen Prozedur nicht weiterarbeiten und auch nicht auf > Eingaben von außen reagieren :-( Du wirst dich entscheiden müssen... H. C. schrieb: > denn was hilft es euch, wenn es um eine leicht > abgeänderte Programmiersprache nenne, die sowieso keiner kennt und für > die es auch keine Dokumentation gibt. Der größte Fehler in einem Forum ist es, wissen zu meinen, was der Rest der Welt tatsächlich weiß. Aber es gibt bestimmt einen Grund, warum du nicht mal verrätst, unter welchen Betriebssystem das alles abläuft. Warum auch, ist ja dein Problem, nicht unseres. Oliver
H. C. schrieb: > Wo kann ich sie am besten runterladen? Wie ich oben schrieb, ist "sndPlaySound" die Funktion von "Windows CE". Das ist Microsofts "abgespecktes Windows" für Kleingeräte mit LCD-Bildschirm, beispielsweise für Kfz-Navigationsgeräte. Für Microsofts Desktop-Betriebssysteme lautet die Funktion zum Abspielen von WAV-Dateien über das Windows-API "PlaySound" und die Aufrufkonvention ist so ähnlich wie bei Dir und Deiner supergeheimen Programmiersprache, jedoch mit drei Parametern. Siehe: http://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx
1 | BOOL PlaySound( |
2 | LPCTSTR pszSound, |
3 | HMODULE hmod, |
4 | DWORD fdwSound |
5 | );
|
Dadurch können benannte Systemsounds, Sounds aus dem RAM, Sounds aus der Registrierdatenbank oder auch Sounds aus einer Datei abgespielt werden. Beim Abspielen aus Datei lautet der Aufruf beispielhaft:
1 | PlaySound(TEXT("recycle.wav"), NULL, SND_FILENAME); |
Der Parameter SND_SYNC muss dabei am Ende nicht angegeben werden, denn er ist default. Ansonsten wäre es wohl:
1 | PlaySound(TEXT("recycle.wav"), NULL, SND_FILENAME || SND_SYNC); |
Die DLL-Datei winmm.dll liegt beispielsweise auf einem WIN7/32-Bit im Systempfad C:\Windows\System32
> Die Funktion gibt es in der winmm.dll, diese hab ich nicht auf meinem > PC. Dann ist dein Windows älter als ca. 16 Jahre oder die Installation ist defekt ... BTW: Falls es doch etwas komplexer wird, könntest du vielleicht eine richtige Programmiersprache verwenden, eine DLL erzeugen und dann die komische Sprache die grobe Steuerung übernehmen lassen.
H. C. schrieb: > Und das ich Schreibe C-ähnliche Sprache kann mir doch auch nicht > angekreidet werden, denn was hilft es euch, wenn es um eine leicht > abgeänderte Programmiersprache nenne, die sowieso keiner kennt und für > die es auch keine Dokumentation gibt. Als nächstes erzählst Du uns wohl, dass das Ganze auf einem Betriebssystem läuft welches keiner kennt und auf einer Hardware, für die es keine Doku gibt.
H. C. schrieb: > oder ob es sowas vielleicht schon fertig gibt? Wurde TTS schon erwähnt? H. C. schrieb: > eine leicht abgeänderte Programmiersprache nenne, die sowieso keiner kennt AutoIt?
man kann die Datei ja auch mit einer eigenen Routine öffnen und aus der Samplerate, anzahl der Kanäle, Dateigröße, bits per Sample die länge berechnen. http://de.wikipedia.org/wiki/RIFF_WAVE
uwe schrieb: > man kann die Datei ja auch mit einer eigenen Routine öffnen Ich schalte mal in den H.C. Emulationsmodus: Aber nicht mit meiner C-ähnlichen Programmiersprache, die ausser PLAY und SLEEP nicht sehr viel mehr kann.
Karl Heinz schrieb: > Ich schalte mal in den H.C. Emulationsmodus: > > Aber nicht mit meiner C-ähnlichen Programmiersprache, die ausser PLAY > und SLEEP nicht sehr viel mehr kann. :-) Womöglich kann man aber aus einer C-ähnlichen Programmiersprache heraus andere Programme aufrufen, die alles können?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.