Befehl ausführen wie?

  • Mit system() aber zu 99,999% sicher kann ich dir sagen, dass du das NICHT willst.
    Es ist der FALSCHE Weg Aus C/C++ externe Befehle auszuführen. Das ist schon in PHP/Python/Ruby extrem schlechter Stil, und in C/C++ eine Todsünde. Es gibt nur wenige Ausnahmen, und einen Sound abspieln gehört nicht dazu, such lieber eine Bibliothek die das kann.

  • Prinzipiell stimme ich Horroreyes zu: eine Library ist meist besser.


    Wenn's aber doch sein soll, dann system eher vermeiden !


    Der bessere Weg ist fork() - exec() - wait().


    Die Kombination braucht eine ausfuehrliche Erklaerung und die erste
    die Google gefunden hat ist fork-exec tutorial

  • Wie Horroreyes schon erwähnte ist es eigentlich eine schlechte Idee, externe Programme auszuführen. Wenn möglich sollte man immer den nativen Weg gehen und es direkt in der jeweiligen Sprache umsetzen, auch wenn das aufwendiger umzusetzen ist oder länger dauert - es läuft dann nicht nur schneller sondern ist auch sauberer ... und man lernt auch noch was dabei :lol:




    nur klappt irgendwie das einbinden der pifm.c nicht und dessen aufruf dann.


    "irgendwie" ... da solltest du schon detailiertere Aussagen machen damit man dir überhaupt helfen kann


  • "irgendwie" ... da solltest du schon detailiertere Aussagen machen damit man dir überhaupt helfen kann


    Ich werde es versuchen.


    Wenn ich die pifm.c richtig verstanden habe ruft man die Funktion zum übertragen der Audiodatei mit void playWav(char* filename, float samplerate, bool stereo) auf (Z.524 bzw. 656).


    Also habe ich diese in einen headerdatei gepackt und jeweils eingebunden.
    Aufrufen tue ich die Funktion das so:

    Code
    playWav("sound.wav", 100.00, 0);


    Allerdings kommt nun beim kompelieren immer folgender fehler:

    Code
    main.c++:14:32: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]


    Allerdings kann ich nicht erkennen was daran falsch sein soll :wallbash:


    Zeile


    Die Header Datei sieht so aus


    und das ist meine gesamte Main


    im Anhang hab ich die pifm.c gepackt


  • Wenn ich die pifm.c richtig verstanden habe ruft man die Funktion zum übertragen der Audiodatei mit void playWav(char* filename, float samplerate, bool stereo) auf (Z.524 bzw. 656).


    Hm, diese Zeilenangaben kann ich nicht reflektieren... Wir sprechen doch von dieser Datei oder -> https://github.com/rm-hull/pifm/blob/master/pifm.c



    Die Header Datei sieht so aus


    *hust* Da fehlt aber irgendwie noch ne ganze Menge Code :huh:


    Zeile 535: void playWav(char* filename, float samplerate, bool stereo)
    das ist nur die definierung der Anweisung/Funktion, danach kommt dann aber überhaupt erst der eigentliche Code was diese Anweisung macht ;)


    Aber nur diese Anweisung zu kopieren wird denk ich nicht reichen da in dieser Anweisung auch noch weiteres aus der pifm.c Datei aufgerufen wird wie zum Beispiel SampleSink oder StereoModulator usw

  • > main.c++:14:32: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    Das ist bloss eine Warnung.


    Es wird eine Konstante uebergeben, und der Parameter von playWav ist prinzipiell veraenderbar.


    Erster Ansatz (korrekt und sauber): den Parameter von playWav auf const char * aendern.


    Wenn das Probleme macht, die Funktion playWav kontrollieren ob sie die Parameter
    tatsaechlich aendert, oder ob der Programmierer bloss zu faul war um sie richtig zu
    deklarieren.


    Wenn der Parameter NICHT geaendert wird, kann die Sache mit einem Typecast erledigt
    werden: playWav( (char *)"sound.wav", 100.00, 0);


    Wenn die Funktion die Parameter aendert, hilft das:


    char file[] = "sound.wav" ;
    playWav( file, 100.00, 0);