الفرق بين المراجعتين لصفحة: «Cordova/cordova plugin media»
لا ملخص تعديل |
تحديث |
||
(7 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:إضافة تسجيل الصوت في كوردوفا}}</noinclude> | <noinclude>{{DISPLAYTITLE:إضافة تسجيل الصوت في كوردوفا}}</noinclude> | ||
[[تصنيف: Cordova]] | [[تصنيف: Cordova]] | ||
[[تصنيف: Plugin]] | [[تصنيف: Cordova Plugin]] | ||
تُمكّن إضافة تسجيل الصوت من تسجيل وتشغيل الملفات الصوتية على الجهاز. | |||
'''ملاحظة''': لا يلتزم التنفيذ الحالي لهذه الإضافة بمواصفات W3C فيما يخص التقاط الوسائط، ويتم توفيره لأجل الملاءمة والاتساق فحسب. سوف يلتزم التنفيذ المستقبلي لهذه الإضافة بأحدث مواصفات W3C، وذلك قد يؤدي إلى إهمال الواجهات البرمجية الحالية. | |||
تعرّف هذه الإضافة مُنشئًا | تعرّف هذه الإضافة مُنشئًا (Constructor) عامًا هو <code>Media</code>. رغم أنَّه موجود في النطاق العام (global scope)، إلا أنه لن يكون متوفرًا إلا بعد إطلاق الحدث <code>[[Cordova/events#deviceready|deviceready]]</code>. <syntaxhighlight lang="javascript">document.addEventListener("deviceready", onDeviceReady, false); | ||
<syntaxhighlight lang="javascript">document.addEventListener("deviceready", onDeviceReady, false); | |||
function onDeviceReady() { | function onDeviceReady() { | ||
console.log(Media); | console.log(Media); | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
== التثبيت == | |||
يمكن تثبيت هذه الإضافة عبر الأمر التالي:<syntaxhighlight lang="shell">cordova plugin add cordova-plugin-media</syntaxhighlight> | |||
== التثبيت == | |||
<syntaxhighlight lang=" | |||
== المنصات المدعومة == | == المنصات المدعومة == | ||
*أندرويد | *[[Cordova/platforms android|أندرويد]] | ||
*iOS | *[[Cordova/platforms ios|iOS]] | ||
*ويندوز | *[[Cordova/platforms windows|ويندوز]] | ||
*Browser | *Browser | ||
==Media== | ==<code>Media</code>== | ||
<syntaxhighlight lang="javascript">var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]);</syntaxhighlight> | <syntaxhighlight lang="javascript">var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]);</syntaxhighlight>المعاملات المُمرَّرة إلى هذه الدالة هي: | ||
* <code>src</code>: عنوان URI يتضمن المحتوى الصوتي. (<code>DOMString</code>) | |||
* <code>src</code>: عنوان URI يتضمن المحتوى الصوتي. (DOMString) | * <code>mediaSuccess</code>: (اختياري) دالة رد النداء (callback) الذي سيُنفذ بعد انتهاء الكائن <code>Media</code> الحالي من عملية التشغيل أو التسجيل أو الإيقاف. | ||
* <code>mediaSuccess</code>: (اختياري) رد النداء (callback) الذي سيُنفذ بعد انتهاء الكائن <code>Media</code> الحالي من عملية التشغيل أو التسجيل أو الإيقاف. | * <code>mediaError</code>: (اختياري) دالة رد النداء التي سيُنفَّذ عند حدوث خطأ. | ||
* <code>mediaError</code>: (اختياري) رد النداء التي | * <code>mediaStatus</code>: (اختياري) دالة رد النداء الذي سيُنفذ ليُشير إلى تغييرات الحالة. | ||
* <code>mediaStatus</code>: (اختياري) رد النداء الذي | |||
<code> | '''ملاحظة''': المعامل <code>src</code> يمكن أن يكون مسارًا من النوع <code>[[Cordova/cordova plugin file#.D8.A7.D9.84.D8.A8.D8.B1.D9.88.D8.AA.D9.88.D9.83.D9.88.D9.84 cdvfile|cdvfile]]</code>. | ||
<syntaxhighlight lang="javascript">var my_media = new Media('cdvfile://localhost/temporary/recording.mp3', ...);</syntaxhighlight> | <syntaxhighlight lang="javascript">var my_media = new Media('cdvfile://localhost/temporary/recording.mp3', ...);</syntaxhighlight> | ||
الثوابت التالية هي المعاملات الوحيدة لرد النداء <code>mediaStatus</code>: | === الثوابت === | ||
*<code>Media.MEDIA_NONE</code> | الثوابت التالية هي المعاملات الوحيدة المقبولة لرد النداء <code>mediaStatus</code>: | ||
*<code>Media.MEDIA_STARTING</code> | *<code>Media.MEDIA_NONE = 0;</code> | ||
*<code>Media.MEDIA_RUNNING</code> | *<code>Media.MEDIA_STARTING = 1;</code> | ||
*<code>Media.MEDIA_PAUSED</code> | *<code>Media.MEDIA_RUNNING = 2;</code> | ||
*<code>Media.MEDIA_STOPPED</code> | *<code>Media.MEDIA_PAUSED = 3;</code> | ||
=== التوابع === | *<code>Media.MEDIA_STOPPED = 4;</code> | ||
* <code>media.getCurrentAmplitude</code>: يُعيد هذا التابع السعة (amplitude) الحالية | === التوابع === | ||
* <code>media.getCurrentPosition</code>: يُعيد هذا التابع الموضع الحالي | التوابع التالية هي التوابع المرتبطة بكائنات <code>Media</code>: | ||
* <code>media.getDuration</code>يُعيد هذا التابع مدة الملف الصوتي. | * <code>media.getCurrentAmplitude</code>: يُعيد هذا التابع السعة (amplitude) الحالية في الملف الصوتي. | ||
* <code>media.getCurrentPosition</code>: يُعيد هذا التابع الموضع الحالي في الملف الصوتي. | |||
* <code>media.getDuration</code>: يُعيد هذا التابع مدة الملف الصوتي. | |||
* <code>media.play</code>: يبدأ أو يستأنف تشغيل الملف الصوتي. | * <code>media.play</code>: يبدأ أو يستأنف تشغيل الملف الصوتي. | ||
* <code>media.pause</code>: | * <code>media.pause</code>: يوقف مؤقتًا (Pause) تشغيل الملف الصوتي. | ||
* <code>media.pauseRecord</code>: | * <code>media.pauseRecord</code>: يوقف مؤقتًا تسجيل الملف الصوتي. | ||
* <code>media.release</code>: | * <code>media.release</code>: يحرر موارد الصوت لنظام التشغيل الأساسي (underlying OS). | ||
* <code>media.resumeRecord</code>: | * <code>media.resumeRecord</code>: يستأنف تسجيل الملف الصوتي. | ||
* <code>media.seekTo</code>: ينقل موضع التشغيل | * <code>media.seekTo</code>: ينقل موضع التشغيل في الملف الصوتي. | ||
* <code>media.setVolume</code>: يضبط مستوى | * <code>media.setVolume</code>: يضبط مستوى الصوت. | ||
* <code>media.startRecord</code>: يبدأ تسجيل الملف الصوتي. | * <code>media.startRecord</code>: يبدأ تسجيل الملف الصوتي. | ||
* <code>media.stopRecord</code>: يوقف تسجيل الملف الصوتي. | * <code>media.stopRecord</code>: يوقف تسجيل الملف الصوتي. | ||
* <code>media.stop</code>: يوقف تشغيل الملف الصوتي. | * <code>media.stop</code>: يوقف تشغيل الملف الصوتي. | ||
* <code>media.setRate</code>: يضبط وتيرة (playback rate) الملف الصوتي. | |||
=== معاملات إضافية للقراءة فقط === | === معاملات إضافية للقراءة فقط === | ||
* <code>position</code>: الموضع داخل مقطوعة الصوت، | * <code>position</code>: الموضع داخل مقطوعة الصوت، ويُحدد بعدد الثواني. | ||
* لا يتم تحديثه | ** لا يتم تحديثه تلقائيًّا أثناء تشغيل الصوت؛ إن أردت تحديثه، فاستدع التابع <code>getCurrentPosition</code>. | ||
* <code>duration</code>: مدة | * <code>duration</code>: مدة المقطع الصوتي (media) بالثانية. | ||
==media.getCurrentAmplitude== | ==<code>media.getCurrentAmplitude</code>== | ||
يُعيد هذا التابع السعة الحالية (amplitude) | يُعيد هذا التابع السعة الحالية (amplitude) في الملف الصوتي. | ||
<syntaxhighlight lang="javascript">media.getCurrentAmplitude(mediaSuccess, [mediaError]);</syntaxhighlight> | <syntaxhighlight lang="javascript">media.getCurrentAmplitude(mediaSuccess, [mediaError]);</syntaxhighlight>المنصات المدعومة هي: | ||
*[[Cordova/platforms android|أندرويد]] | |||
*أندرويد | *[[Cordova/platforms ios|iOS]] | ||
*iOS | المعاملات المُمرَّرة إلى هذا التابع هي: | ||
* <code>mediaSuccess</code>: رد النداء (callback) الذي ستُمرّر إليه السعة الحالية (<code>0.0</code> - <code>1.0</code>). | |||
* <code>mediaSuccess</code>: رد النداء (callback) الذي ستُمرّر إليه السعة الحالية (0.0 - 1.0). | * <code>mediaError</code>: (اختياري) رد النداء الذي سيُنفّذ في حالة حدوث خطأ. | ||
* <code>mediaError</code>: (اختياري) رد | إليك المثال التالي الذي يشرح كيفية استعمال التابع <code>getCurrentAmplitude</code>:<syntaxhighlight lang="javascript">// قارئ الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
var my_media = new Media(src, onSuccess, onError); | var my_media = new Media(src, onSuccess, onError); | ||
// | // تسجيل الصوت | ||
my_media.startRecord(); | my_media.startRecord(); | ||
mediaTimer = setInterval(function () { | mediaTimer = setInterval(function () { | ||
// | // الحصول على سعة الوسيط | ||
my_media.getCurrentAmplitude( | my_media.getCurrentAmplitude( | ||
// | // رد نداء النجاح | ||
function (amp) { | function (amp) { | ||
console.log(amp + "%"); | console.log(amp + "%"); | ||
}, | }, | ||
// | // رد نداء الخطأ | ||
function (e) { | function (e) { | ||
console.log("Error getting amp=" + e); | console.log("Error getting amp=" + e); | ||
سطر 92: | سطر 86: | ||
}, 1000);</syntaxhighlight> | }, 1000);</syntaxhighlight> | ||
==media.getCurrentPosition== | ==<code>media.getCurrentPosition</code>== | ||
يُعيد هذا التابع الموضع الحالي | يُعيد هذا التابع الموضع الحالي في الملف الصوتي. كما يُحدِّث المعامل <code>position</code> الخاص بالكائن <code>Media</code>. | ||
<syntaxhighlight lang="javascript">media.getCurrentPosition(mediaSuccess, [mediaError]);</syntaxhighlight> | <syntaxhighlight lang="javascript">media.getCurrentPosition(mediaSuccess, [mediaError]);</syntaxhighlight>المعاملات المُمرَّرة إلى هذا التابع هي: | ||
* <code>mediaSuccess</code>: رد النداء الذي سيُمرّر إليه الموضع الحالي بالثواني. | * <code>mediaSuccess</code>: رد النداء الذي سيُمرّر إليه الموضع الحالي بالثواني. | ||
* <code>mediaError</code>: (اختياري) رد النداء الذي سيُنفّذ في حالة حدوث خطأ. | * <code>mediaError</code>: (اختياري) رد النداء الذي سيُنفّذ في حالة حدوث خطأ. | ||
اطلع على المثال التالي الذي يشرح كيفية استعمال التابع <code>getCurrentPosition</code>:<syntaxhighlight lang="javascript">// قارئ الصوت | |||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
var my_media = new Media(src, onSuccess, onError); | var my_media = new Media(src, onSuccess, onError); | ||
// | // تحديث موضع الوسيط كل ثانية | ||
var mediaTimer = setInterval(function () { | var mediaTimer = setInterval(function () { | ||
// | // الحصول على موضع الوسيط | ||
my_media.getCurrentPosition( | my_media.getCurrentPosition( | ||
// | // رد نداء النجاح | ||
function (position) { | function (position) { | ||
if (position > -1) { | if (position > -1) { | ||
سطر 113: | سطر 105: | ||
} | } | ||
}, | }, | ||
// | // رد نداء الخطأ | ||
function (e) { | function (e) { | ||
console.log("Error getting pos=" + e); | console.log("Error getting pos=" + e); | ||
سطر 120: | سطر 112: | ||
}, 1000);</syntaxhighlight> | }, 1000);</syntaxhighlight> | ||
==media.getDuration== | ==<code>media.getDuration</code>== | ||
يُعيد هذا التابع مدة الملف الصوتي بالثواني. إذا كانت المدة غير معروفة، فسيُعيد القيمة -1. | يُعيد هذا التابع مدة الملف الصوتي بالثواني. إذا كانت المدة غير معروفة، فسيُعيد التابع القيمة <code>-1</code>. | ||
<syntaxhighlight lang="javascript">media.getDuration();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.getDuration();</syntaxhighlight>مثال عن استعمال التابع <code>getDuration</code>:<syntaxhighlight lang="javascript">// قارئ الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
var my_media = new Media(src, onSuccess, onError); | var my_media = new Media(src, onSuccess, onError); | ||
// | // الحصول على المدة | ||
var counter = 0; | var counter = 0; | ||
var timerDur = setInterval(function() { | var timerDur = setInterval(function() { | ||
سطر 142: | سطر 132: | ||
}, 100);</syntaxhighlight> | }, 100);</syntaxhighlight> | ||
==media.pause== | ==<code>media.pause</code>== | ||
يوقف هذا التابع تشغيل الملف الصوتي مؤقتًا. | يوقف هذا التابع تشغيل الملف الصوتي مؤقتًا. | ||
<syntaxhighlight lang="javascript">media.pause();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.pause();</syntaxhighlight>مثال سريع حول استعمال التابع <code>pause</code>:<syntaxhighlight lang="javascript">// تشغيل الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
function playAudio(url) { | function playAudio(url) { | ||
// | // url تشغيل الملف الصوت الموجود عند العنوان | ||
var my_media = new Media(url, | var my_media = new Media(url, | ||
// | // رد نداء النجاح | ||
function () { console.log("playAudio():Audio Success"); }, | function () { console.log("playAudio():Audio Success"); }, | ||
// | // رد نداء الخطأ | ||
function (err) { console.log("playAudio():Audio Error: " + err); } | function (err) { console.log("playAudio():Audio Error: " + err); } | ||
); | ); | ||
// | // تشغيل الصوت | ||
my_media.play(); | my_media.play(); | ||
// | // إيقاف مؤقت بعد 10 ثواني | ||
setTimeout(function () { | setTimeout(function () { | ||
my_media.pause(); | my_media.pause(); | ||
سطر 165: | سطر 153: | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
==media.pauseRecord== | ==<code>media.pauseRecord</code>== | ||
يوقف هذا التابع مؤقتًا تسجيل (recording) الملف الصوتي. | يوقف هذا التابع مؤقتًا تسجيل (recording) الملف الصوتي. | ||
<syntaxhighlight lang="javascript">media.pauseRecord();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.pauseRecord();</syntaxhighlight>المنصات المدعومة هي: | ||
*[[Cordova/platforms ios|iOS]] | |||
*iOS | مثال سريع حول استعمال التابع <code>pauseRecord</code>:<syntaxhighlight lang="javascript">// تسجيل الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
function recordAudio() { | function recordAudio() { | ||
var src = "myrecording.mp3"; | var src = "myrecording.mp3"; | ||
var mediaRec = new Media(src, | var mediaRec = new Media(src, | ||
// | // رد نداء النجاح | ||
function() { | function() { | ||
console.log("recordAudio():Audio Success"); | console.log("recordAudio():Audio Success"); | ||
}, | }, | ||
// | // رد نداء الخطأ | ||
function(err) { | function(err) { | ||
console.log("recordAudio():Audio Error: "+ err.code); | console.log("recordAudio():Audio Error: "+ err.code); | ||
}); | }); | ||
// | // تسجيل الصوت | ||
mediaRec.startRecord(); | mediaRec.startRecord(); | ||
// | // إيقاف التسجيل مؤقتا بعد 5 ثواني | ||
setTimeout(function() { | setTimeout(function() { | ||
mediaRec.pauseRecord(); | mediaRec.pauseRecord(); | ||
سطر 193: | سطر 179: | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
==media.play== | ==<code>media.play</code>== | ||
يبدأ هذا التابع أو يستأنف تشغيل الملف الصوتي. | يبدأ هذا التابع أو يستأنف تشغيل الملف الصوتي. | ||
<syntaxhighlight lang="javascript">media.play();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.play();</syntaxhighlight>مثال سريع حول استعمال التابع <code>play</code>:<syntaxhighlight lang="javascript">// تشغيل الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
function playAudio(url) { | function playAudio(url) { | ||
// | // url تشغيل الملف الصوتي الموجود عند العنوان | ||
var my_media = new Media(url, | var my_media = new Media(url, | ||
// | // رد نداء النجاح | ||
function () { | function () { | ||
console.log("playAudio():Audio Success"); | console.log("playAudio():Audio Success"); | ||
}, | }, | ||
// | // رد نداء الخطأ | ||
function (err) { | function (err) { | ||
console.log("playAudio():Audio Error: " + err); | console.log("playAudio():Audio Error: " + err); | ||
} | } | ||
); | ); | ||
// | // تشغيل الصوت | ||
my_media.play(); | my_media.play(); | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
== ملاحظات خاصة بمنصة iOS == | === ملاحظات خاصة بمنصة iOS === | ||
* <code>numberOfLoops</code>: مرّر هذا الخيار إلى التابع <code>play</code> لتحديد | * <code>numberOfLoops</code>: مرّر هذا الخيار إلى التابع <code>play</code> لتحديد عدد مرات تشغيل الملف الصوتي، على سبيل المثال: | ||
<syntaxhighlight lang="javascript">var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3") | <syntaxhighlight lang="javascript">var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3") | ||
myMedia.play({ numberOfLoops: 2 })</syntaxhighlight> | myMedia.play({ numberOfLoops: 2 })</syntaxhighlight> | ||
* <code>playAudioWhenScreenIsLocked</code>: مرِّر هذا الخيار إلى التابع <code>play</code> لتحديد ما إذا كنت تريد السماح بتشغيل الوسيط | * <code>playAudioWhenScreenIsLocked</code>: مرِّر هذا الخيار إلى التابع <code>play</code> لتحديد ما إذا كنت تريد السماح بتشغيل الوسيط عندما تكون الشاشة مقفولة (locked). إذا عُيِّن هذا الخيار إلى القيمة <code>true</code> (القيمة الافتراضية)، سيتم تجاهل حالة زر كتم الصوت. على سبيل المثال: | ||
<syntaxhighlight lang="javascript">var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3"); | <syntaxhighlight lang="javascript">var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3"); | ||
myMedia.play({ playAudioWhenScreenIsLocked : true }); | myMedia.play({ playAudioWhenScreenIsLocked : true }); | ||
myMedia.setVolume('1.0');</syntaxhighlight> | myMedia.setVolume('1.0');</syntaxhighlight> | ||
ملاحظة: للسماح بتشغيل الوسيط أو الصوت الخلفي أثناء قفل الشاشة، عليك إضافة <code>audio</code> إلى <code>UIBackgroundModes</code> في الملف <code>info.plist</code>. راجع [https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW23 Apple | '''ملاحظة''': للسماح بتشغيل الوسيط أو الصوت الخلفي أثناء قفل الشاشة، عليك إضافة <code>audio</code> إلى <code>UIBackgroundModes</code> في الملف <code>info.plist</code>. راجع [https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW23 توثيق Apple] لهذا الخصوص. لاحظ أيضًا أنّ عليك بدء تشغيل الصوت قبل الانتقال إلى الخلفية. | ||
* | * '''ترتيب البحث عن الملفات''': عند الاكتفاء بتقديم اسم ملف أو مسار بسيطٍ، فستبحث [[Cordova/platforms ios|منصة iOS]] في المجلد <code>www</code> عن ذلك الملف، ثم في مجلد التطبيق <code>documents/tmp</code>: | ||
<syntaxhighlight lang="javascript">var myMedia = new Media("audio/beer.mp3") | <syntaxhighlight lang="javascript">var myMedia = new Media("audio/beer.mp3") | ||
myMedia.play() // | myMedia.play() // www/audio/beer.mp3 تبحث في البداية عن الملف في | ||
// <application>/documents/tmp/audio/beer.mp3 ثم في </syntaxhighlight> | |||
==media.release== | ==<code>media.release</code>== | ||
يُحرّر (Releases) هذا التابع الموارد الصوتية لنظام التشغيل. هذا الأمر مهم بشكل خاص لنظام [[Cordova/platforms android|أندرويد]]، نظرًا لوجود عدد محدود من نُسخ <code>OpenCore</code> المخصصة لتشغيل الوسائط. يجب أن تستدعي التطبيقاتُ الدالةَ <code>release</code> لكل موارد <code>Media</code> التي لم تعد تحتاجها. | |||
<syntaxhighlight lang="javascript">media.release();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.release();</syntaxhighlight>إليك المثال التالي:<syntaxhighlight lang="javascript">// تشغيل الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
var my_media = new Media(src, onSuccess, onError); | var my_media = new Media(src, onSuccess, onError); | ||
سطر 240: | سطر 223: | ||
my_media.release();</syntaxhighlight> | my_media.release();</syntaxhighlight> | ||
==media.resumeRecord== | ==<code>media.resumeRecord</code>== | ||
يستأنف هذا التابع تسجيل الملف الصوتي. | يستأنف هذا التابع تسجيل الملف الصوتي. | ||
<syntaxhighlight lang="javascript">media.resumeRecord();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.resumeRecord();</syntaxhighlight>المنصات المدعومة هي: | ||
*iOS | *iOS | ||
مثال سريع حول التابع <code>resumeRecord</code>:<syntaxhighlight lang="javascript">// تسجيل الصوت | |||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
function recordAudio() { | function recordAudio() { | ||
var src = "myrecording.mp3"; | var src = "myrecording.mp3"; | ||
var mediaRec = new Media(src, | var mediaRec = new Media(src, | ||
// | // رد نداء النجاح | ||
function() { | function() { | ||
console.log("recordAudio():Audio Success"); | console.log("recordAudio():Audio Success"); | ||
}, | }, | ||
// | //رد نداء الخطأ | ||
function(err) { | function(err) { | ||
console.log("recordAudio():Audio Error: "+ err.code); | console.log("recordAudio():Audio Error: "+ err.code); | ||
}); | }); | ||
// | // تسجيل الصوت | ||
mediaRec.startRecord(); | mediaRec.startRecord(); | ||
// | // ايقاف التسجيل مؤقتا بعد 5 ثواني | ||
setTimeout(function() { | setTimeout(function() { | ||
mediaRec.pauseRecord(); | mediaRec.pauseRecord(); | ||
}, 5000); | }, 5000); | ||
// | // استئناف التسجيل بعد 10 ثواني | ||
setTimeout(function() { | setTimeout(function() { | ||
mediaRec.resumeRecord(); | mediaRec.resumeRecord(); | ||
سطر 272: | سطر 253: | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
==media.seekTo== | ==<code>media.seekTo</code>== | ||
يضبط هذا التابع موضع التشغيل الحالي في الملف الصوتي. | |||
<syntaxhighlight lang="javascript">media.seekTo(milliseconds);</syntaxhighlight> | <syntaxhighlight lang="javascript">media.seekTo(milliseconds);</syntaxhighlight>المعاملات المُمرَّرة إلى هذا التابع هي: | ||
* <code>milliseconds</code>: يحدد هذا المعامل موضع التشغيل في الملف الصوت، يُحسب بالميلي ثانية. | |||
* <code>milliseconds</code>: يحدد هذا | مثال سريع حول استعمال التابع <code>seekTo</code>:<syntaxhighlight lang="javascript">// قارئ الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
var my_media = new Media(src, onSuccess, onError); | var my_media = new Media(src, onSuccess, onError); | ||
my_media.play(); | my_media.play(); | ||
// | // انتقل إلى الموضع الموجود بعد 10 ثواني من البداية بعد 5 ثواني من الآن | ||
setTimeout(function() { | setTimeout(function() { | ||
my_media.seekTo(10000); | my_media.seekTo(10000); | ||
}, 5000);</syntaxhighlight> | }, 5000);</syntaxhighlight> | ||
==media.setVolume== | ==<code>media.setVolume</code>== | ||
يضبط هذا التابع مستوى الصوت | يضبط هذا التابع مستوى الصوت الخاص بالملف الصوتي. | ||
<syntaxhighlight lang="javascript">media.setVolume(volume);</syntaxhighlight> | <syntaxhighlight lang="javascript">media.setVolume(volume);</syntaxhighlight>المعاملات المُمرَّرة إلى هذا التابع هي: | ||
* <code>volume</code>: يمثل هذا المعامل مستوى الصوت. يجب أن تكون القيمة ضمن النطاق <code>0.0</code> - <code>1.0</code>. | |||
* <code>volume</code>: | المنصات المدعومة هي: | ||
*[[Cordova/platforms android|أندرويد]] | |||
*أندرويد | *[[Cordova/platforms ios|iOS]] | ||
*iOS | مثال سريع حول استعمال التابع <code>setVolume</code>:<syntaxhighlight lang="javascript">// تشغيل الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
function playAudio(url) { | function playAudio(url) { | ||
// | // url تشغيل الملف الصوتي الموجود عند العنوان | ||
var my_media = new Media(url, | var my_media = new Media(url, | ||
// | // رد نداء النجاح | ||
function() { | function() { | ||
console.log("playAudio():Audio Success"); | console.log("playAudio():Audio Success"); | ||
}, | }, | ||
// | // رد نداء الخطأ | ||
function(err) { | function(err) { | ||
console.log("playAudio():Audio Error: "+err); | console.log("playAudio():Audio Error: "+err); | ||
}); | }); | ||
// | // تشغيل الصوت | ||
my_media.play(); | my_media.play(); | ||
// | // كتم الصوت بعد ثانيتين | ||
setTimeout(function() { | setTimeout(function() { | ||
my_media.setVolume('0.0'); | my_media.setVolume('0.0'); | ||
}, 2000); | }, 2000); | ||
// | // ضيط الصوت عند القيمة 1.0 بعد 5 ثواني | ||
setTimeout(function() { | setTimeout(function() { | ||
my_media.setVolume('1.0'); | my_media.setVolume('1.0'); | ||
سطر 323: | سطر 300: | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
==media.startRecord== | ==<code>media.startRecord</code>== | ||
يبدأ هذا التابع تسجيل الملف الصوتي. | يبدأ هذا التابع تسجيل الملف الصوتي. | ||
<syntaxhighlight lang="javascript">media.startRecord();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.startRecord();</syntaxhighlight>المنصات المدعومة هي: | ||
*[[Cordova/platforms android|أندرويد]] | |||
*أندرويد | *[[Cordova/platforms ios|iOS]] | ||
*iOS | *[[Cordova/platforms windows|ويندوز]] | ||
*ويندوز | مثال سريع حول استعمال التابع <code>startRecord</code>:<syntaxhighlight lang="javascript">// تسجيل الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
function recordAudio() { | function recordAudio() { | ||
var src = "myrecording.mp3"; | var src = "myrecording.mp3"; | ||
var mediaRec = new Media(src, | var mediaRec = new Media(src, | ||
// | // رد نداء النجاح | ||
function() { | function() { | ||
console.log("recordAudio():Audio Success"); | console.log("recordAudio():Audio Success"); | ||
}, | }, | ||
// | // رد نداء الخطأ | ||
function(err) { | function(err) { | ||
console.log("recordAudio():Audio Error: "+ err.code); | console.log("recordAudio():Audio Error: "+ err.code); | ||
}); | }); | ||
// | // تسجيل الصوت | ||
mediaRec.startRecord(); | mediaRec.startRecord(); | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
===ملاحظات خاصة بمنصة أندرويد === | ===ملاحظات خاصة بمنصة أندرويد === | ||
* تُسجل أجهزة أندرويد الصوت في | * تُسجل أجهزة أندرويد الصوت في ملفٍ بتنسيق AAC ADTS. ويجب أن ينتهي الملف المحدد بالامتداد <code>aac.</code>. | ||
* يتم وصل عناصر التحكم في مستوى الصوت في الجهاز بمستوى الصوت في الوسائط قيد التشغيل. وبمجرد استدعاء الدالة <code>release()</code> على آخر كائن | * يتم وصل عناصر التحكم في مستوى الصوت في الجهاز بمستوى الصوت في الوسائط قيد التشغيل. وبمجرد استدعاء الدالة <code>release()</code> على آخر كائن <code>Media</code> مُنشأ، تعود عناصر التحكم في الصوت إلى سلوكها الافتراضي. يحدث هذا أيضًا عند التنقل بين الصفحات، حيث يؤدي ذلك إلى تحرير جميع كائنات الوسائط. | ||
== ملاحظات خاصة بمنصة iOS == | === ملاحظات خاصة بمنصة iOS === | ||
* لا يسجل نظام iOS إلا الملفات من النوع .wav و ،.m4a وسيعيد خطأً | * لا يسجل نظام iOS إلا الملفات من النوع <code>.wav</code> و ،<code>.m4a</code> وسيعيد خطأً إن لم يكن امتداد اسم الملف صحيحًا. | ||
* إذا لم يتم توفير المسار الكامل، سيُوضع التسجيل في مجلد التطبيق <code>documents/tmp</code>. يمكن الوصول إلى ذلك التسجيل عبر الواجهة البرمجية <code>File</code> باستخدام <code>LocalFileSystem.TEMPORARY</code>. يجب أن تكون المجلدات الفرعية المحددة في وقت التسجيل موجودًا | * إذا لم يتم توفير المسار الكامل، سيُوضع التسجيل في مجلد التطبيق <code>documents/tmp</code>. يمكن الوصول إلى ذلك التسجيل عبر الواجهة البرمجية <code>[[Cordova/cordova plugin file|File]]</code> باستخدام <code>LocalFileSystem.TEMPORARY</code>. يجب أن تكون المجلدات الفرعية المحددة في وقت التسجيل موجودًا سلفًا. | ||
* يمكن تسجيل الملفات وتشغيلها باستخدام مستندات URI: | * يمكن تسجيل الملفات وتشغيلها باستخدام مستندات URI: | ||
<syntaxhighlight lang="javascript">var myMedia = new Media("documents://beer.mp3")</syntaxhighlight> | <syntaxhighlight lang="javascript">var myMedia = new Media("documents://beer.mp3")</syntaxhighlight> | ||
منذ الإصدار | |||
* منذ الإصدار العاشر من منصة iOS، أصبح من الإلزامي تقديم وصف للاستخدام في الملف <code>info.plist</code> إن كنت تريد الوصول إلى البيانات الحساسة. عندما يستأذن النظام المستخدم للوصول إلى تلك المعلومات، سيُعرَض وصف الاستخدام ذاك كجزء من مربع حوار الاستئذان، ولكن إذا لم توفر وصف الاستخدام، فسيتعطل التطبيق قبل عرض مربع الحوار. كما سترفض Apple التطبيقات التي تحاول الوصول إلى البيانات الخاصة دون أن تقدم وصفًا للاستخدام. | |||
تتطلب هذه الإضافة أوصاف الاستخدام التالية: | تتطلب هذه الإضافة أوصاف الاستخدام التالية: | ||
* <code>NSMicrophoneUsageDescription</code> يحدد سبب وصول التطبيق إلى ميكروفون المستخدم. | * <code>NSMicrophoneUsageDescription</code>: يحدد سبب وصول التطبيق إلى ميكروفون المستخدم. | ||
لإضافة هذه المُدخلة إلى <code>info.plist</code>، يمكنك استخدام الوسم <code>edit-config</code> في الملف <code>config.xml</code> على النحو التالي: | لإضافة هذه المُدخلة إلى الملف <code>info.plist</code>، يمكنك استخدام الوسم <code>[[Cordova/config ref#edit-config|edit-config]]</code> في الملف <code>[[Cordova/config ref|config.xml]]</code> على النحو التالي: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="xml"><edit-config target="NSMicrophoneUsageDescription" file="*-Info.plist" mode="merge"> | ||
<string>need microphone access to record sounds</string> | <string>need microphone access to record sounds</string> | ||
</edit-config></syntaxhighlight> | </edit-config></syntaxhighlight> | ||
=== ملاحظات خاصة بمنصة ويندوز === | === ملاحظات خاصة بمنصة ويندوز === | ||
* يمكن لأجهزة ويندوز استخدام التنسيقات MP3 و M4A و WMA | * يمكن لأجهزة ويندوز استخدام التنسيقات MP3 و M4A و WMA لأجل الصوتيات المسجلة. ولكن غالبًا لن يكون بمقدورك استخدام التنسيق MP3 لتسجيل الصوت على أجهزة Windows Phone 8.1، لأن مرمز (encoder) MP3 [https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.mediaproperties.mediaencodingprofile.createmp3.aspx غير مشحون في منصة Windows Phone]. | ||
* إذا لم يتم توفير المسار الكامل، سيُوضع التسجيل في المجلد <code>AppData/temp</code>. يمكن الوصول إلى ذلك التسجيل عبر الواجهة البرمجية <code>File</code> باستخدام <code>LocalFileSystem.TEMPORARY</code> أو <code>ms-appdata:///temp/<filename></code> | * إذا لم يتم توفير المسار الكامل، سيُوضع التسجيل في المجلد <code>AppData/temp</code>. يمكن الوصول إلى ذلك التسجيل عبر الواجهة البرمجية <code>[[Cordova/cordova plugin file|File]]</code> باستخدام <code>LocalFileSystem.TEMPORARY</code> أو روابط <code>ms-appdata:///temp/<filename></code>. | ||
* يجب أن تكون كل | * يجب أن تكون كل المجلدات الفرعية المحددة في وقت التسجيل موجودًا بالفعل. | ||
==media.stop== | ==<code>media.stop</code>== | ||
يوقف هذا التابع تشغيل الملف الصوتي. | يوقف هذا التابع تشغيل الملف الصوتي. | ||
<syntaxhighlight lang="javascript">media.stop();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.stop();</syntaxhighlight>إليك مثال عن استعمال التابع <code>stop</code>:<syntaxhighlight lang="javascript">// تشغيل الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
function playAudio(url) { | function playAudio(url) { | ||
// | // url تشغيل الملف الصوتي الموجود عند العنوان | ||
var my_media = new Media(url, | var my_media = new Media(url, | ||
// | // رد نداء النجاح | ||
function() { | function() { | ||
console.log("playAudio():Audio Success"); | console.log("playAudio():Audio Success"); | ||
}, | }, | ||
// | // رد نداء الخطأ | ||
function(err) { | function(err) { | ||
console.log("playAudio():Audio Error: "+err); | console.log("playAudio():Audio Error: "+err); | ||
} | } | ||
); | ); | ||
// | // تشغيل الصوت | ||
my_media.play(); | my_media.play(); | ||
// | // إيقاف التشغيل مؤقتا بعد 10 ثواني | ||
setTimeout(function() { | setTimeout(function() { | ||
my_media.stop(); | my_media.stop(); | ||
سطر 397: | سطر 371: | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
==media.stopRecord== | ==<code>media.stopRecord</code>== | ||
يوقف هذا التابع تسجيل الملف الصوتي. | يوقف هذا التابع تسجيل الملف الصوتي. | ||
<syntaxhighlight lang="javascript">media.stopRecord();</syntaxhighlight> | <syntaxhighlight lang="javascript">media.stopRecord();</syntaxhighlight>المنصات المدعومة هي: | ||
*[[Cordova/platforms android|أندرويد]] | |||
*أندرويد | *[[Cordova/platforms ios|iOS]] | ||
*iOS | *[[Cordova/platforms windows|ويندوز]] | ||
*ويندوز | مثال سريع حول استعمال التابع <code>stopRecord</code>:<syntaxhighlight lang="javascript">// تسجيل الصوت | ||
<syntaxhighlight lang="javascript">// | |||
// | // | ||
function recordAudio() { | function recordAudio() { | ||
var src = "myrecording.mp3"; | var src = "myrecording.mp3"; | ||
var mediaRec = new Media(src, | var mediaRec = new Media(src, | ||
// | // رد نداء النجاح | ||
function() { | function() { | ||
console.log("recordAudio():Audio Success"); | console.log("recordAudio():Audio Success"); | ||
}, | }, | ||
// | // رد نداء الخطأ | ||
function(err) { | function(err) { | ||
console.log("recordAudio():Audio Error: "+ err.code); | console.log("recordAudio():Audio Error: "+ err.code); | ||
} | } | ||
); | ); | ||
// | // تسجيل الصوت | ||
mediaRec.startRecord(); | mediaRec.startRecord(); | ||
// | // إيقاف التسجيل بعد 10 ثواني | ||
setTimeout(function() { | setTimeout(function() { | ||
mediaRec.stopRecord(); | mediaRec.stopRecord(); | ||
}, 10000); | }, 10000); | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
== <code>media.setRate</code> == | |||
<syntaxhighlight lang="javascript">media.setRate(rate); | |||
</syntaxhighlight>المنصات المدعومة هي: | |||
*[[Cordova/platforms ios|iOS]] | |||
المعامل المُمرَّر إلى هذا التابع هو: | |||
*<code>'''rate'''</code>: يمثل هذا المعامل وتيرة تشغيل الصوت. | |||
مثال سريع حول استعمال التابع <code>stopRecord</code>:<syntaxhighlight lang="javascript">// تشغيل الصوت | |||
// | |||
var my_media = new Media(src, onSuccess, onError); | |||
my_media.play(); | |||
// مضاعفة وتيرة الصوت بعد 10 ثواني | |||
setTimeout(function() { | |||
my_media.setRate(2.0); | |||
}, 5000);</syntaxhighlight> | |||
==MediaError== | ==<code>MediaError</code>== | ||
يُعاد كائنٌ <code>MediaError</code> إلى دالة رد النداء <code>mediaError</code> عند حدوث خطأ. | يُعاد كائنٌ من النوع <code>MediaError</code> إلى دالة رد النداء <code>mediaError</code> عند حدوث خطأ. | ||
=== خاصيات === | === خاصيات === | ||
* <code>code</code>: | * <code>code</code>: رمز خطأٍ محدد مسبقًا (انظر أدناه). | ||
* <code>message</code>: رسالة | * <code>message</code>: رسالة خطأٍ تحدد تفاصيل الخطأ. | ||
===ثوابت=== | ===ثوابت=== | ||
*<code>MediaError.MEDIA_ERR_ABORTED</code> | *<code>MediaError.MEDIA_ERR_ABORTED = 1</code> | ||
*<code>MediaError.MEDIA_ERR_NETWORK</code> | *<code>MediaError.MEDIA_ERR_NETWORK = 2</code> | ||
*<code>MediaError.MEDIA_ERR_DECODE</code> | *<code>MediaError.MEDIA_ERR_DECODE = 3</code> | ||
*<code>MediaError.MEDIA_ERR_NONE_SUPPORTED</code> = | *<code>MediaError.MEDIA_ERR_NONE_SUPPORTED = 4</code> | ||
== انظر أيضًا == | |||
* إضافة <nowiki/>[[Cordova/cordova plugin media capture|الوصول إلى الوسائط المتعددة]] | |||
* إضافة <nowiki/>[[Cordova/cordova plugin file|الوصول إلى الملفات]] | |||
* [[Cordova/plugins|دليل تطوير الإضافات في كوردوفا]] | |||
* [[Cordova/privacy|إدارة الخصوصية]] | |||
==مصادر== | ==مصادر== | ||
*[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-media/index.html صفحة cordova-plugin-media في توثيق كوردوفا الرسمي.] | *[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-media/index.html صفحة cordova-plugin-media في توثيق كوردوفا الرسمي.] |
المراجعة الحالية بتاريخ 20:28، 3 ديسمبر 2020
تُمكّن إضافة تسجيل الصوت من تسجيل وتشغيل الملفات الصوتية على الجهاز.
ملاحظة: لا يلتزم التنفيذ الحالي لهذه الإضافة بمواصفات W3C فيما يخص التقاط الوسائط، ويتم توفيره لأجل الملاءمة والاتساق فحسب. سوف يلتزم التنفيذ المستقبلي لهذه الإضافة بأحدث مواصفات W3C، وذلك قد يؤدي إلى إهمال الواجهات البرمجية الحالية.
تعرّف هذه الإضافة مُنشئًا (Constructor) عامًا هو Media
. رغم أنَّه موجود في النطاق العام (global scope)، إلا أنه لن يكون متوفرًا إلا بعد إطلاق الحدث deviceready
.
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log(Media);
}
التثبيت
يمكن تثبيت هذه الإضافة عبر الأمر التالي:
cordova plugin add cordova-plugin-media
المنصات المدعومة
Media
var media = new Media(src, mediaSuccess, [mediaError], [mediaStatus]);
المعاملات المُمرَّرة إلى هذه الدالة هي:
src
: عنوان URI يتضمن المحتوى الصوتي. (DOMString
)mediaSuccess
: (اختياري) دالة رد النداء (callback) الذي سيُنفذ بعد انتهاء الكائنMedia
الحالي من عملية التشغيل أو التسجيل أو الإيقاف.mediaError
: (اختياري) دالة رد النداء التي سيُنفَّذ عند حدوث خطأ.mediaStatus
: (اختياري) دالة رد النداء الذي سيُنفذ ليُشير إلى تغييرات الحالة.
ملاحظة: المعامل src
يمكن أن يكون مسارًا من النوع cdvfile
.
var my_media = new Media('cdvfile://localhost/temporary/recording.mp3', ...);
الثوابت
الثوابت التالية هي المعاملات الوحيدة المقبولة لرد النداء mediaStatus
:
Media.MEDIA_NONE = 0;
Media.MEDIA_STARTING = 1;
Media.MEDIA_RUNNING = 2;
Media.MEDIA_PAUSED = 3;
Media.MEDIA_STOPPED = 4;
التوابع
التوابع التالية هي التوابع المرتبطة بكائنات Media
:
media.getCurrentAmplitude
: يُعيد هذا التابع السعة (amplitude) الحالية في الملف الصوتي.media.getCurrentPosition
: يُعيد هذا التابع الموضع الحالي في الملف الصوتي.media.getDuration
: يُعيد هذا التابع مدة الملف الصوتي.media.play
: يبدأ أو يستأنف تشغيل الملف الصوتي.media.pause
: يوقف مؤقتًا (Pause) تشغيل الملف الصوتي.media.pauseRecord
: يوقف مؤقتًا تسجيل الملف الصوتي.media.release
: يحرر موارد الصوت لنظام التشغيل الأساسي (underlying OS).media.resumeRecord
: يستأنف تسجيل الملف الصوتي.media.seekTo
: ينقل موضع التشغيل في الملف الصوتي.media.setVolume
: يضبط مستوى الصوت.media.startRecord
: يبدأ تسجيل الملف الصوتي.media.stopRecord
: يوقف تسجيل الملف الصوتي.media.stop
: يوقف تشغيل الملف الصوتي.media.setRate
: يضبط وتيرة (playback rate) الملف الصوتي.
معاملات إضافية للقراءة فقط
position
: الموضع داخل مقطوعة الصوت، ويُحدد بعدد الثواني.- لا يتم تحديثه تلقائيًّا أثناء تشغيل الصوت؛ إن أردت تحديثه، فاستدع التابع
getCurrentPosition
.
- لا يتم تحديثه تلقائيًّا أثناء تشغيل الصوت؛ إن أردت تحديثه، فاستدع التابع
duration
: مدة المقطع الصوتي (media) بالثانية.
media.getCurrentAmplitude
يُعيد هذا التابع السعة الحالية (amplitude) في الملف الصوتي.
media.getCurrentAmplitude(mediaSuccess, [mediaError]);
المنصات المدعومة هي:
المعاملات المُمرَّرة إلى هذا التابع هي:
mediaSuccess
: رد النداء (callback) الذي ستُمرّر إليه السعة الحالية (0.0
-1.0
).mediaError
: (اختياري) رد النداء الذي سيُنفّذ في حالة حدوث خطأ.
إليك المثال التالي الذي يشرح كيفية استعمال التابع getCurrentAmplitude
:
// قارئ الصوت
//
var my_media = new Media(src, onSuccess, onError);
// تسجيل الصوت
my_media.startRecord();
mediaTimer = setInterval(function () {
// الحصول على سعة الوسيط
my_media.getCurrentAmplitude(
// رد نداء النجاح
function (amp) {
console.log(amp + "%");
},
// رد نداء الخطأ
function (e) {
console.log("Error getting amp=" + e);
}
);
}, 1000);
media.getCurrentPosition
يُعيد هذا التابع الموضع الحالي في الملف الصوتي. كما يُحدِّث المعامل position
الخاص بالكائن Media
.
media.getCurrentPosition(mediaSuccess, [mediaError]);
المعاملات المُمرَّرة إلى هذا التابع هي:
mediaSuccess
: رد النداء الذي سيُمرّر إليه الموضع الحالي بالثواني.mediaError
: (اختياري) رد النداء الذي سيُنفّذ في حالة حدوث خطأ.
اطلع على المثال التالي الذي يشرح كيفية استعمال التابع getCurrentPosition
:
// قارئ الصوت
//
var my_media = new Media(src, onSuccess, onError);
// تحديث موضع الوسيط كل ثانية
var mediaTimer = setInterval(function () {
// الحصول على موضع الوسيط
my_media.getCurrentPosition(
// رد نداء النجاح
function (position) {
if (position > -1) {
console.log((position) + " sec");
}
},
// رد نداء الخطأ
function (e) {
console.log("Error getting pos=" + e);
}
);
}, 1000);
media.getDuration
يُعيد هذا التابع مدة الملف الصوتي بالثواني. إذا كانت المدة غير معروفة، فسيُعيد التابع القيمة -1
.
media.getDuration();
مثال عن استعمال التابع getDuration
:
// قارئ الصوت
//
var my_media = new Media(src, onSuccess, onError);
// الحصول على المدة
var counter = 0;
var timerDur = setInterval(function() {
counter = counter + 100;
if (counter > 2000) {
clearInterval(timerDur);
}
var dur = my_media.getDuration();
if (dur > 0) {
clearInterval(timerDur);
document.getElementById('audio_duration').innerHTML = (dur) + " sec";
}
}, 100);
media.pause
يوقف هذا التابع تشغيل الملف الصوتي مؤقتًا.
media.pause();
مثال سريع حول استعمال التابع pause
:
// تشغيل الصوت
//
function playAudio(url) {
// url تشغيل الملف الصوت الموجود عند العنوان
var my_media = new Media(url,
// رد نداء النجاح
function () { console.log("playAudio():Audio Success"); },
// رد نداء الخطأ
function (err) { console.log("playAudio():Audio Error: " + err); }
);
// تشغيل الصوت
my_media.play();
// إيقاف مؤقت بعد 10 ثواني
setTimeout(function () {
my_media.pause();
}, 10000);
}
media.pauseRecord
يوقف هذا التابع مؤقتًا تسجيل (recording) الملف الصوتي.
media.pauseRecord();
المنصات المدعومة هي:
مثال سريع حول استعمال التابع pauseRecord
:
// تسجيل الصوت
//
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
// رد نداء النجاح
function() {
console.log("recordAudio():Audio Success");
},
// رد نداء الخطأ
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
});
// تسجيل الصوت
mediaRec.startRecord();
// إيقاف التسجيل مؤقتا بعد 5 ثواني
setTimeout(function() {
mediaRec.pauseRecord();
}, 5000);
}
media.play
يبدأ هذا التابع أو يستأنف تشغيل الملف الصوتي.
media.play();
مثال سريع حول استعمال التابع play
:
// تشغيل الصوت
//
function playAudio(url) {
// url تشغيل الملف الصوتي الموجود عند العنوان
var my_media = new Media(url,
// رد نداء النجاح
function () {
console.log("playAudio():Audio Success");
},
// رد نداء الخطأ
function (err) {
console.log("playAudio():Audio Error: " + err);
}
);
// تشغيل الصوت
my_media.play();
}
ملاحظات خاصة بمنصة iOS
numberOfLoops
: مرّر هذا الخيار إلى التابعplay
لتحديد عدد مرات تشغيل الملف الصوتي، على سبيل المثال:
var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3")
myMedia.play({ numberOfLoops: 2 })
playAudioWhenScreenIsLocked
: مرِّر هذا الخيار إلى التابعplay
لتحديد ما إذا كنت تريد السماح بتشغيل الوسيط عندما تكون الشاشة مقفولة (locked). إذا عُيِّن هذا الخيار إلى القيمةtrue
(القيمة الافتراضية)، سيتم تجاهل حالة زر كتم الصوت. على سبيل المثال:
var myMedia = new Media("http://audio.ibeat.org/content/p1rj1s/p1rj1s_-_rockGuitar.mp3");
myMedia.play({ playAudioWhenScreenIsLocked : true });
myMedia.setVolume('1.0');
ملاحظة: للسماح بتشغيل الوسيط أو الصوت الخلفي أثناء قفل الشاشة، عليك إضافة audio
إلى UIBackgroundModes
في الملف info.plist
. راجع توثيق Apple لهذا الخصوص. لاحظ أيضًا أنّ عليك بدء تشغيل الصوت قبل الانتقال إلى الخلفية.
- ترتيب البحث عن الملفات: عند الاكتفاء بتقديم اسم ملف أو مسار بسيطٍ، فستبحث منصة iOS في المجلد
www
عن ذلك الملف، ثم في مجلد التطبيقdocuments/tmp
:
var myMedia = new Media("audio/beer.mp3")
myMedia.play() // www/audio/beer.mp3 تبحث في البداية عن الملف في
// <application>/documents/tmp/audio/beer.mp3 ثم في
media.release
يُحرّر (Releases) هذا التابع الموارد الصوتية لنظام التشغيل. هذا الأمر مهم بشكل خاص لنظام أندرويد، نظرًا لوجود عدد محدود من نُسخ OpenCore
المخصصة لتشغيل الوسائط. يجب أن تستدعي التطبيقاتُ الدالةَ release
لكل موارد Media
التي لم تعد تحتاجها.
media.release();
إليك المثال التالي:
// تشغيل الصوت
//
var my_media = new Media(src, onSuccess, onError);
my_media.play();
my_media.stop();
my_media.release();
media.resumeRecord
يستأنف هذا التابع تسجيل الملف الصوتي.
media.resumeRecord();
المنصات المدعومة هي:
- iOS
مثال سريع حول التابع resumeRecord
:
// تسجيل الصوت
//
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
// رد نداء النجاح
function() {
console.log("recordAudio():Audio Success");
},
//رد نداء الخطأ
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
});
// تسجيل الصوت
mediaRec.startRecord();
// ايقاف التسجيل مؤقتا بعد 5 ثواني
setTimeout(function() {
mediaRec.pauseRecord();
}, 5000);
// استئناف التسجيل بعد 10 ثواني
setTimeout(function() {
mediaRec.resumeRecord();
}, 10000);
}
media.seekTo
يضبط هذا التابع موضع التشغيل الحالي في الملف الصوتي.
media.seekTo(milliseconds);
المعاملات المُمرَّرة إلى هذا التابع هي:
milliseconds
: يحدد هذا المعامل موضع التشغيل في الملف الصوت، يُحسب بالميلي ثانية.
مثال سريع حول استعمال التابع seekTo
:
// قارئ الصوت
//
var my_media = new Media(src, onSuccess, onError);
my_media.play();
// انتقل إلى الموضع الموجود بعد 10 ثواني من البداية بعد 5 ثواني من الآن
setTimeout(function() {
my_media.seekTo(10000);
}, 5000);
media.setVolume
يضبط هذا التابع مستوى الصوت الخاص بالملف الصوتي.
media.setVolume(volume);
المعاملات المُمرَّرة إلى هذا التابع هي:
volume
: يمثل هذا المعامل مستوى الصوت. يجب أن تكون القيمة ضمن النطاق0.0
-1.0
.
المنصات المدعومة هي:
مثال سريع حول استعمال التابع setVolume
:
// تشغيل الصوت
//
function playAudio(url) {
// url تشغيل الملف الصوتي الموجود عند العنوان
var my_media = new Media(url,
// رد نداء النجاح
function() {
console.log("playAudio():Audio Success");
},
// رد نداء الخطأ
function(err) {
console.log("playAudio():Audio Error: "+err);
});
// تشغيل الصوت
my_media.play();
// كتم الصوت بعد ثانيتين
setTimeout(function() {
my_media.setVolume('0.0');
}, 2000);
// ضيط الصوت عند القيمة 1.0 بعد 5 ثواني
setTimeout(function() {
my_media.setVolume('1.0');
}, 5000);
}
media.startRecord
يبدأ هذا التابع تسجيل الملف الصوتي.
media.startRecord();
المنصات المدعومة هي:
مثال سريع حول استعمال التابع startRecord
:
// تسجيل الصوت
//
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
// رد نداء النجاح
function() {
console.log("recordAudio():Audio Success");
},
// رد نداء الخطأ
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
});
// تسجيل الصوت
mediaRec.startRecord();
}
ملاحظات خاصة بمنصة أندرويد
- تُسجل أجهزة أندرويد الصوت في ملفٍ بتنسيق AAC ADTS. ويجب أن ينتهي الملف المحدد بالامتداد
aac.
. - يتم وصل عناصر التحكم في مستوى الصوت في الجهاز بمستوى الصوت في الوسائط قيد التشغيل. وبمجرد استدعاء الدالة
release()
على آخر كائنMedia
مُنشأ، تعود عناصر التحكم في الصوت إلى سلوكها الافتراضي. يحدث هذا أيضًا عند التنقل بين الصفحات، حيث يؤدي ذلك إلى تحرير جميع كائنات الوسائط.
ملاحظات خاصة بمنصة iOS
- لا يسجل نظام iOS إلا الملفات من النوع
.wav
و ،.m4a
وسيعيد خطأً إن لم يكن امتداد اسم الملف صحيحًا. - إذا لم يتم توفير المسار الكامل، سيُوضع التسجيل في مجلد التطبيق
documents/tmp
. يمكن الوصول إلى ذلك التسجيل عبر الواجهة البرمجيةFile
باستخدامLocalFileSystem.TEMPORARY
. يجب أن تكون المجلدات الفرعية المحددة في وقت التسجيل موجودًا سلفًا. - يمكن تسجيل الملفات وتشغيلها باستخدام مستندات URI:
var myMedia = new Media("documents://beer.mp3")
- منذ الإصدار العاشر من منصة iOS، أصبح من الإلزامي تقديم وصف للاستخدام في الملف
info.plist
إن كنت تريد الوصول إلى البيانات الحساسة. عندما يستأذن النظام المستخدم للوصول إلى تلك المعلومات، سيُعرَض وصف الاستخدام ذاك كجزء من مربع حوار الاستئذان، ولكن إذا لم توفر وصف الاستخدام، فسيتعطل التطبيق قبل عرض مربع الحوار. كما سترفض Apple التطبيقات التي تحاول الوصول إلى البيانات الخاصة دون أن تقدم وصفًا للاستخدام.
تتطلب هذه الإضافة أوصاف الاستخدام التالية:
NSMicrophoneUsageDescription
: يحدد سبب وصول التطبيق إلى ميكروفون المستخدم.
لإضافة هذه المُدخلة إلى الملف info.plist
، يمكنك استخدام الوسم edit-config
في الملف config.xml
على النحو التالي:
<edit-config target="NSMicrophoneUsageDescription" file="*-Info.plist" mode="merge">
<string>need microphone access to record sounds</string>
</edit-config>
ملاحظات خاصة بمنصة ويندوز
- يمكن لأجهزة ويندوز استخدام التنسيقات MP3 و M4A و WMA لأجل الصوتيات المسجلة. ولكن غالبًا لن يكون بمقدورك استخدام التنسيق MP3 لتسجيل الصوت على أجهزة Windows Phone 8.1، لأن مرمز (encoder) MP3 غير مشحون في منصة Windows Phone.
- إذا لم يتم توفير المسار الكامل، سيُوضع التسجيل في المجلد
AppData/temp
. يمكن الوصول إلى ذلك التسجيل عبر الواجهة البرمجيةFile
باستخدامLocalFileSystem.TEMPORARY
أو روابطms-appdata:///temp/<filename>
. - يجب أن تكون كل المجلدات الفرعية المحددة في وقت التسجيل موجودًا بالفعل.
media.stop
يوقف هذا التابع تشغيل الملف الصوتي.
media.stop();
إليك مثال عن استعمال التابع stop
:
// تشغيل الصوت
//
function playAudio(url) {
// url تشغيل الملف الصوتي الموجود عند العنوان
var my_media = new Media(url,
// رد نداء النجاح
function() {
console.log("playAudio():Audio Success");
},
// رد نداء الخطأ
function(err) {
console.log("playAudio():Audio Error: "+err);
}
);
// تشغيل الصوت
my_media.play();
// إيقاف التشغيل مؤقتا بعد 10 ثواني
setTimeout(function() {
my_media.stop();
}, 10000);
}
media.stopRecord
يوقف هذا التابع تسجيل الملف الصوتي.
media.stopRecord();
المنصات المدعومة هي:
مثال سريع حول استعمال التابع stopRecord
:
// تسجيل الصوت
//
function recordAudio() {
var src = "myrecording.mp3";
var mediaRec = new Media(src,
// رد نداء النجاح
function() {
console.log("recordAudio():Audio Success");
},
// رد نداء الخطأ
function(err) {
console.log("recordAudio():Audio Error: "+ err.code);
}
);
// تسجيل الصوت
mediaRec.startRecord();
// إيقاف التسجيل بعد 10 ثواني
setTimeout(function() {
mediaRec.stopRecord();
}, 10000);
}
media.setRate
media.setRate(rate);
المنصات المدعومة هي:
المعامل المُمرَّر إلى هذا التابع هو:
rate
: يمثل هذا المعامل وتيرة تشغيل الصوت.
مثال سريع حول استعمال التابع stopRecord
:
// تشغيل الصوت
//
var my_media = new Media(src, onSuccess, onError);
my_media.play();
// مضاعفة وتيرة الصوت بعد 10 ثواني
setTimeout(function() {
my_media.setRate(2.0);
}, 5000);
MediaError
يُعاد كائنٌ من النوع MediaError
إلى دالة رد النداء mediaError
عند حدوث خطأ.
خاصيات
code
: رمز خطأٍ محدد مسبقًا (انظر أدناه).message
: رسالة خطأٍ تحدد تفاصيل الخطأ.
ثوابت
MediaError.MEDIA_ERR_ABORTED = 1
MediaError.MEDIA_ERR_NETWORK = 2
MediaError.MEDIA_ERR_DECODE = 3
MediaError.MEDIA_ERR_NONE_SUPPORTED = 4
انظر أيضًا
- إضافة الوصول إلى الوسائط المتعددة
- إضافة الوصول إلى الملفات
- دليل تطوير الإضافات في كوردوفا
- إدارة الخصوصية