2011-01-12 1 views
32

Я хочу воспроизвести аудиофайл по нажатию кнопки. Я определил метод onClickListener() и файл макета. При добавлении файлов WAV в каталог res/, я получаю следующее сообщение об ошибке компиляции:Каталог для хранения аудиофайлов в Android

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

Мой вопрос заключается в следующем:
1. Что каталог мне нужно хранить звуковые файлы? В настоящее время они находятся в папке res /.
2. Также, mp.setDataSource("/res/temp.wav") правильный способ вызова медиаплеера?

ответ

-19

не записывайте медиа-файлы внутри res/

Поместите файлы (temp.wav) в папке/SDCard/аудио (если вы используете эмулятор).

и сделать это:

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

так как это изменяется, когда я пытаюсь установить приложение на реальный телефон? Я имею в виду, что вышеупомянутое исправление действует только для эмулятора? – Sriram

+0

no .. даже если вы планируете разместить его на реальном телефоне, убедитесь, что файл находится в соответствующем пути (этот путь может быть любым, как вам нравится, но не помещайте его в res /). – Sen

+3

Я как раз собирался добавить некоторые звуковые эффекты в свое приложение для Android и искал какую-то помощь в том, куда их поставить, когда я столкнулся с этим вопросом. Я действительно не понимаю, как этот ответ может быть принят. Это не менее полезно. Насколько я могу судить, res/raw - прекрасное место для размещения звуковых эффектов и подобных. Поскольку существует ограничение на размер файлов, помещенных в res/raw, я думаю, что файлы MP3 и другие большие файлы должны быть помещены в папку/assets? – britzl

12

надеюсь, что это поможет:

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.

это от dev guide.

[Edit:? Но я не думаю, что это хорошая идея, чтобы положить ваши музыкальные файлы в каталог Рез на всех - это зависит от того, какова цель этих файлов]

+0

Мои аудиофайлы находятся в формате wav, не так уверенны, если они квалифицируются как сырые файлы. Что касается цели, я просто хотел посмотреть, могу ли я сыграть какую-то музыку на нескольких щелчках. Я новичок в Android, который вы видите, и я просто соображаю, как это происходит! Спасибо за быстрый ответ! – Sriram

76

аудиофайлы могут переместить в папку с именем raw, которая должна быть создана в папке res.

Доступ к ней осуществляется с помощью следующего кода:

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

Это самый простой способ. Вы можете попробовать.

+0

Вместо пользовательской переменной «контекст» можно напрямую использовать this.getApplicationContext(). – Kozuch

+0

Я проверил документы для MadiaPlayer.create и нашел: _ «Обратите внимание, что поскольку метод prepare() вызывается автоматически в этом методе **, вы не можете изменить тип аудиопотока (см. SetAudioStreamType (int)) **, идентификатор аудио сессии (см. setAudioSessionId (int)) или аудио-атрибуты (см. setAudioAttributes (AudioAttributes) нового MediaPlayer. "_ так что вам не нужна строка:' mPlayer.setAudioStreamType (AudioManager.STREAM_MUSIC); ' – Semanticer

+0

вы можете получить доступ к папка внутри raw вместо самих аудиофайлов? – Zypps987

2

Обратите внимание, что подготовка может занять некоторое время, поэтому она может замедлить взаимодействие пользователей с вашим приложением. См. Примечания разработчика here, в частности раздел Асинхронная подготовка!

Вы также можете использовать SoundPool, если размер файлов меньше 1 МБ. Это позволит вам синхронизировать с потоком пользовательского интерфейса. Это very useful article об использовании этого (у Ларса есть ряд замечательных статей!).