2011-01-12 14 views
32

Chcę odtworzyć plik audio na podstawie kliknięcia przycisku. Zdefiniowałem metodę onClickListener() i plik układu. Kiedy dodać pliki wav do katalogu res/, otrzymuję następujący błąd kompilacji:Katalog do przechowywania plików audio w Androidzie

invalid resource directory name temp.wav /hello/res line 1 Android AAPT Problem

Moje pytanie brzmi następująco:
1. Co muszę zrobić katalog do przechowywania plików audio? Obecnie znajdują się w folderze res /.
2. Czy prawidłowy sposób wywołania odtwarzacza multimedialnego ma również mp.setDataSource("/res/temp.wav")?

Odpowiedz

-19

Dont umieścić pliki multimedialne wewnątrz res/

Umieść swoje pliki (temp.wav) w folderze/sdcard/audio (jeśli używasz emulatora).

i to zrobić:

mp.setDataSource("/sdcard/audio/temp.wav"); 
+0

więc jak to się zmienia, gdy próbuję zainstalować aplikację na prawdziwym telefonie? Mam na myśli, czy powyższa poprawka jest ważna tylko dla emulatora? – Sriram

+0

no .. nawet jeśli planujesz umieścić go na prawdziwym telefonie, upewnij się, że plik znajduje się w odpowiedniej ścieżce (ta ścieżka może być dowolna, ale nie umieszczaj jej w res /). – Sen

+3

Właśnie dodałem jakieś efekty dźwiękowe do mojej aplikacji na Androida i szukałem pomocy, jak je umieścić, gdy natknąłem się na to pytanie. Naprawdę nie rozumiem, w jaki sposób ta odpowiedź może być zaakceptowana. To wcale nie jest pomocne. O ile mogę powiedzieć, res/raw jest idealnym miejscem do umieszczania efektów dźwiękowych i podobnych. Ponieważ istnieje ograniczenie rozmiaru plików umieszczanych w res/raw, przypuszczam, że pliki MP3 i inne duże pliki powinny zostać umieszczone w folderze/assets? – britzl

12

nadzieję, że pomoże:

raw/

Arbitrary files to save in their raw form. To open these resources with a raw InputStream, call Resources.openRawResource() with the resource ID, which is R.raw.filename.

However, if you need access to original file names and file hierarchy, you might consider saving some resources in the assets/ directory (instead of res/raw/). Files in assets/ are not given a resource ID, so you can read them only using AssetManager.

To z dev guide.

[EDIT: ale nie sądzę, że jest to dobry pomysł, aby umieścić swoje pliki muzyczne do katalogu res w ogóle - to zależy od tego jaki jest cel tych plików]

+0

Moje pliki audio są w formacie WAV, nie jest pewne, czy kwalifikują się one jako pliki nieprzetworzone. Co do celu, chciałem tylko sprawdzić, czy mogę zagrać muzykę na podstawie kilku kliknięć przycisku. Jestem nowy w Androidzie, a ja po prostu wymyślam sobie drogę! Dzięki za szybką odpowiedź! – Sriram

76

Pliki audio można przenieść do folderu o nazwie raw, który powinien zostać utworzony w folderze res.

Dostęp można uzyskać za pomocą następującego kodu:

MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.soundclip); 
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mPlayer.start(); 

Jest to najprostszy sposób. Możesz go wypróbować ..

+0

Zamiast niestandardowej zmiennej "kontekstowej" można bezpośrednio użyć this.getApplicationContext(). – Kozuch

+0

Sprawdziłem dokumenty dla MadiaPlayer.create i znalazłem: _ "Zauważ, że ponieważ prepare() jest wywoływana automatycznie w tej metodzie, ** nie możesz zmienić typu strumienia audio (zobacz setAudioStreamType (int)) **, identyfikator sesji audio (zobacz setAudioSessionId (int)) lub atrybuty audio (zobacz setAudioAttributes (AudioAttributes) nowego MediaPlayer. "_ wygląda na to, że nie potrzebujesz linii:' mPlayer.setAudioStreamType (AudioManager.STREAM_MUSIC); ' – Semanticer

+0

możesz uzyskać dostęp do folder wewnątrz raw zamiast samych plików audio? – Zypps987

2

Pamiętaj, że przygotowanie może zająć trochę czasu, więc może spowolnić interakcje użytkowników z Twoją aplikacją. Zobacz uwagi programisty: here, w szczególności rozdział Przygotowanie asynchroniczne!

Można również użyć SoundPool, jeśli pliki mają mniej niż 1MB. Obsługuje on synchronizację z wątkiem interfejsu użytkownika. Jest to very useful article na temat korzystania z niego (Lars ma wiele świetnych artykułów!).