• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ - odtwarzanie dźwięków

Cloud VPS
0 głosów
5,388 wizyt
pytanie zadane 10 stycznia 2017 w C i C++ przez Eliro Stary wyjadacz (12,160 p.)
Planuję zrobić prosty program, który po wpisaniu "Ala ma kota" rozdzieli sobie to zdanie na pojedyncze słowa "ala","ma" oraz "kota" i odtworzy jedno po drugim nagranie ala.mp3, ma.mp3, kota.mp3.

1.W jaki sposób zrobić takie rozdzielanie zdania na słowa?

2. W jaki sposób odtworzyć w mp3 w zwykłym programie konsolowym?

2 odpowiedzi

0 głosów
odpowiedź 10 stycznia 2017 przez playerony Pasjonat (15,220 p.)
wybrane 17 października 2018 przez Eliro
 
Najlepsza
Z odtwarzaniem plików *.mp3 w konsoli mogą występować lekkie tudności, gdyż ten format w porównaniu do *.wav jest poddawany kompresji. Na początku spróbuj odtwarzać pliki *.wav funkcją PlaySound() z biblbioteki windows.h, o której więcej dowiesz się tu:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx

Jeżeli chodzi o dzielenie stringa to zrobiłbym tak jak kolega, czliy wykorzystał to, że pomiedzy słowami są spacje.
2
komentarz 10 stycznia 2017 przez niezalogowany

Z odtwarzaniem plików *.mp3 w konsoli mogą występować lekkie tudności, gdyż ten format w porównaniu do *.wav jest poddawany kompresji. 

I w jaki to niby sposób przeszkadza w napisaniu tego przy użyciu konsoli? Kod nie ma rozróżnienia kodu realizującego ściśle określone zadanie na "konsolowy" czy "okienkowy". Różnicą jest to, że w przypadku konsoli podłączysz wszystko ze stdin, stdout, a w przypadku okienek z kontrolkami...

Btw autor nie podał systemu z jakiego korzysta więc rozsądniej byłoby mu podać coś nie czysto windowsowego ;)

komentarz 11 stycznia 2017 przez Eliro Stary wyjadacz (12,160 p.)
undefined reference to `PlaySoundA@12

 

Wolałbym coś innego. Nie będę tracił pół dnia na walkę z Windowsem.
komentarz 11 stycznia 2017 przez playerony Pasjonat (15,220 p.)
PlaySound(TEXT("nazwa_pliku.wav"), NULL, SND_FILENAME);

 

komentarz 12 stycznia 2017 przez Eliro Stary wyjadacz (12,160 p.)
edycja 12 stycznia 2017 przez Eliro
"undefined reference to `PlaySoundA@12"!!!!

 

EDIT

podlinkowałem "winmm" i teraz odtwarza jedynie dźwięk systemowy.
+1 głos
odpowiedź 10 stycznia 2017 przez niezalogowany
edycja 10 stycznia 2017
  1. Split stringa po białych znakach
  2. Tak samo jak w okienkowym, np. wykorzystać jakąś bibliotekę

Prawdziwym problemem jest wygenerowanie dźwięku który brzmi jak wypowiadane słowa ;)

@edit, źle cię zrozumiałem, myślałem że chcesz wygenerować takie słowa "wypowiadane" przez komputer i zapisywane do pliku ;)

A jeżeli to to jest prościej, wystarczy podłączyć odpowiedniego liba np:

  1. https://www.mpg123.de/
  2. https://ffmpeg.org/developer.html
komentarz 10 stycznia 2017 przez Eliro Stary wyjadacz (12,160 p.)
edycja 10 stycznia 2017 przez Eliro
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main(int argc, const char * argv[]) {

    string str1("the brown fox jumped over the lazy dog");
    istringstream iss(str1);

    while (iss) {
        string word;
        iss >> word;
        cout << word << endl;
    }
    return 0;
}

 

W jaki sposób dodać do rozdzielonego stringa końcówkę .mp3?

komentarz 10 stycznia 2017 przez niezalogowany

Ale samo dodanie ".mp3" nie spowoduje zapisania pliku aby był zgodny w tym formacie ;)

Lepiej chyba użyć strok() do tego zadania, ale ogólnie to po prostu: mystring += ".mp3"

komentarz 11 stycznia 2017 przez Eliro Stary wyjadacz (12,160 p.)

Chybaśmy się nie zrozumieli. Chodzi o odtworzenie gotowego mp3. Przykładowo, jeśli wpiszę "ala ma kota", to chcę aby program odtworzył ala.mp3, ma.mp3, kota.mp3, które znajdują się już w tym samym folderze. Zapisując nazwy pliku z rozszerzeniem do zmiennej lub tablicy spowoduje, że łatwiej będzie na tym później operować, bo z kolei chcąc odtworzyć potem plik będę musiał podać jego nazwę.

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main(int argc, const char * argv[]) {

    string str1("the brown fox jumped over the lazy dog");
    istringstream iss(str1);

    while (iss) {
        string word;
        string rozszerzenie = ".mp3";
        iss >> word;
        if(iss==NULL)
        {
           break;
        }
        string wynik = word+rozszerzenie;
        cout << wynik << endl;
    }
    return 0;
}

 

W miejscu cout << wynik << endl; oczywiście wstawie jakieś odwołanie do funkcji, która będzie odtwarzać dźwięk. Instrukcje warunkową dodałem dlatego, że robiło mi na samym końcu puste ".mp3".

Podobne pytania

0 głosów
1 odpowiedź 1,406 wizyt
0 głosów
0 odpowiedzi 230 wizyt
+1 głos
3 odpowiedzi 628 wizyt

93,485 zapytań

142,417 odpowiedzi

322,765 komentarzy

62,897 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...