السلام عليكم
لدي في مشروعي وضعت فيه SoundPool من أجل تشغيل بعض التأثيرات الصوتية، وكان كل شيء جاهز، ولكن اردت أن اضيف بعض الأشياء الى مشروعي وهذه الأشياء تتطلب أن يكون minSDK (اصغر اصدار اندرويد مدعوم) هو SDK 21 ، وكانت لدي هي SDK 16 وعندما قمت بتغييرها في ملف gradle الى 21 حدثت معي مشكلة في SoundPool.
الكود التالي هو كود SoundPool الذي استعمله في مشروعي:
SoundPool soundPool;//لا بد ان يكون في مكان عام
int soundClick;//لا بد ان يكون في مكان عام
//انشاء اداة soundP
//ool (عادتا ما يكون داخل onCreate)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
soundPool = new SoundPool.Builder().setMaxStreams(3)
.setAudioAttributes(audioAttributes).build();
} else {
soundPool = new SoundPool(3 , AudioManager.STREAM_MUSIC, 0);
}
//تحميل الاداة بالملف الصوتي الذي نريد تشغيله
soundClick = soundPool.load(this, R.raw.click , 1);
//R.raw.click هو الملف الصوتي في مجلد raw
/*
المشكلة حدثت في هذا السطر
فبعد تتبعي للكود واستعمال try catch وجدت ان الكود يعمل بدون مشاكل الا هذا السطر
ورسالة الخطاء التي تظهر هي
File res/raw/click.wav from drawable resource ID #0x7f080000
/*
اما بالنسبة لكود تشغيل الملف الصوتي فهو:
soundPoolplay(soundClick, 1, 1, 1, 0, 1);
//وهذا الكود عادتا ما يكون داخل حدث النقر على زر
//وهذا الكود يعمل بدون مشاكل ولا يوجد مشكلة الا في الكود الذي تم توضيحه سابقا
بحثت في النت ووجدت مجموعه من الحلول جربت الكثير منها ولكن بدون فائدة.
ملاحظات:
1) عندما اقوم بتغيير minSDK الى SDK اصغر من 21 مثلا 20 او 19 يعمل الكود بدون مشاكل ، ولا تحدث المشاكل الا اذا وضعته 21 او اكبر.
2) جربت طريقة اخرى لتحميل الملف الصوتي للاداة، اي في الجزء الذي حدثت فيه المشكلة، هذه الطريقة هي:
soundClick.load(getAssets().openFd("move.wav"),0);
// هذه الطريقة تختلف عن السابقة انه يتم وضع الملف الصوتي في المجلد assets
// ولكن بدون فائدة وظهرت رسالة الخطاء هذه
//This file can not be opened as a file descriptor; it is probably compressed
السؤال
رفيق هادي مبارك هادي مشعيل
السلام عليكم
لدي في مشروعي وضعت فيه SoundPool من أجل تشغيل بعض التأثيرات الصوتية، وكان كل شيء جاهز، ولكن اردت أن اضيف بعض الأشياء الى مشروعي وهذه الأشياء تتطلب أن يكون minSDK (اصغر اصدار اندرويد مدعوم) هو SDK 21 ، وكانت لدي هي SDK 16 وعندما قمت بتغييرها في ملف gradle الى 21 حدثت معي مشكلة في SoundPool.
الكود التالي هو كود SoundPool الذي استعمله في مشروعي:
SoundPool soundPool;//لا بد ان يكون في مكان عام
int soundClick;//لا بد ان يكون في مكان عام
//انشاء اداة soundP
//ool (عادتا ما يكون داخل onCreate)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
soundPool = new SoundPool.Builder().setMaxStreams(3)
.setAudioAttributes(audioAttributes).build();
} else {
soundPool = new SoundPool(3 , AudioManager.STREAM_MUSIC, 0);
}
//تحميل الاداة بالملف الصوتي الذي نريد تشغيله
soundClick = soundPool.load(this, R.raw.click , 1);
//R.raw.click هو الملف الصوتي في مجلد raw
/*
المشكلة حدثت في هذا السطر
فبعد تتبعي للكود واستعمال try catch وجدت ان الكود يعمل بدون مشاكل الا هذا السطر
ورسالة الخطاء التي تظهر هي
File res/raw/click.wav from drawable resource ID #0x7f080000
/*
اما بالنسبة لكود تشغيل الملف الصوتي فهو:
soundPoolplay(soundClick, 1, 1, 1, 0, 1);
//وهذا الكود عادتا ما يكون داخل حدث النقر على زر
//وهذا الكود يعمل بدون مشاكل ولا يوجد مشكلة الا في الكود الذي تم توضيحه سابقا
بحثت في النت ووجدت مجموعه من الحلول جربت الكثير منها ولكن بدون فائدة.
ملاحظات:
1) عندما اقوم بتغيير minSDK الى SDK اصغر من 21 مثلا 20 او 19 يعمل الكود بدون مشاكل ، ولا تحدث المشاكل الا اذا وضعته 21 او اكبر.
2) جربت طريقة اخرى لتحميل الملف الصوتي للاداة، اي في الجزء الذي حدثت فيه المشكلة، هذه الطريقة هي:
soundClick.load(getAssets().openFd("move.wav"),0);
// هذه الطريقة تختلف عن السابقة انه يتم وضع الملف الصوتي في المجلد assets
// ولكن بدون فائدة وظهرت رسالة الخطاء هذه
//This file can not be opened as a file descriptor; it is probably compressed
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.