سؤال

يمكنني استخدام مكون TMediaPlayer لممارسة الموسيقى.

إنه يعمل بشكل جيد مع معظم مساراتي. لكنه لا يعمل مع بعض المسارات. عندما أرغب في تشغيلها، يتم عرض رسالة الخطأ التالية:

alt text

أيها الألمانية ولكنها تعني تقريبا ما يلي:

في Project ProfusicPlayer.exe حدث استثناء من الفئة EmcideviceError. الرسالة: "خطأ عند بدء تشغيل MCI.". تم إيقاف العملية. تابع مع "أمر / عبارة واحدة" أو "ابدأ".

إنهاء البرنامج مباشرة بعد استدعاء الإجراء "تشغيل" من tmediaPlayer.

حدث هذا الخطأ مع الملف التالي على سبيل المثال:

  • حجم الملف: 7.40 ميغابايت
  • المدة: 4:02 دقيقة
  • Bitrate: 256 KBIT / S

لقد قمت بتشفير هذا الملف مع معدل معدل 128 kbit / s وبالتالي حجم ملف 3.70 ميغابايت: إنه يعمل بشكل جيد!

ما الخطأ في الملف الأول؟ يمكن تشغيل Windows Media Player أو برامج أخرى دون أي مشاكل.

هل من الممكن أن يتعذر على TMMEDIAPLEER في Delphi التعامل مع الملفات الكبيرة (على سبيل المثال> 5 ميغابايت) أو الملفات ذات البت عالية (على سبيل المثال> 128 kbit / s)؟

ماذا يمكنني أن أفعل لحل المشكلة؟

سؤال إضافي:لماذا لا يمكنني استخدام جرب / باستثناء منع نافذة الرسائل؟

  try
    Player.Play;
  except
    showmessage('Cannot be played');
  end;

هذا لا يعمل.

هل كانت مفيدة؟

المحلول

حسنا اكتشفت مصدر المشكلة. اعتدت هذا صغير دلفي مشغل MP3 البرنامج التعليمي (تستطيع تحميل المشروع هناك) لاختبار ملف MP3 الخاص بك وحصلت على نفس الخطأ كما لديك مع MP3 الخاص بك.

بعد بعض الاختبارات، اكتشفت أن ملفات MP3 الأخرى تلعب جيدا مع هذا التطبيق التعليمي. عملت MP3 جيدا مع Windows Media Player وغيرها من مشغلات الوسائط المتعددة.

نعم إعادة ترميز الملف يحل المشكلة، لكنها ليست المشكلة الحقيقية. المشكلة تأتي من بيانات تعريف MP3 (علامات ID3) وليس الصوت ترميز نفسه.

انا إستعملت mplictag. ل فقط قم بإزالة العلامات الموجودة على الملف وكل شيء لعبت جيدا بعد ذلك، لا emcideviceError.

يبدو أن tmediaPlayer يمكن أن تعطل مع بعض تنسيق البيانات الوصفية. لقد رأيت أيضا تقارير BUG TMEDIAPLAPLYER مع ملفات MP3 التي تضمان غطاء JPEG Art أيضا أثناء بحثي.

معظم الأشخاص الذين كانوا يجيبون على أشخاص يعانون من الأخطاء حول TmediaPlayer في المنتديات التي بحثت فيها قائلا أن TmediAplayer قديم حقا وهو أمر سيء للغاية (أعتقد أنه لم يتم تحديثه في مثل 10 سنوات). إذا كنت تريد دعم MP3 قوي في تطبيقك فكر في استخدام مكون آخر. وبعد يمكنك أيضا استخدام ActiveX Windows Media Player في تطبيق Delphi الخاص بك أيضا.

لسؤالك الإضافي الخاص بك حول المحاولة / باستثناء تجربة شيء مثل:

try
    //load & play here
except
    on E:Exception do
        ShowMessage('Cannot be played! ' + E.Message);
end;

أو النظر في استخدام التآليلين إذا لم يكن الأمر قد اصطياد الخطأ.

نصائح أخرى

هل حاولت وضع التحكم في TabplicationEvents على النموذج الخاص بك، ومعالجة حدث Onexception.

procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
begin
  if E is EMCIDeviceError  then
    begin
     MessageDlg('Cannot be played, '+ e.message, mtError, [mbOK], 0)
     //Or Do Nothing...
    end else
     MessageDlg(e.message, mtError, [mbOK], 0);
end;

يتم رفع الاستثناء على فتح، وليس المسرحية. لذلك إذا تمكنت من تغيير التعليمات البرمجية الخاصة بك إلى استثناءات فخ على الإجراء المفتوح.

  MediaPlayer2.filename :='';
  try
    MediaPlayer2.Open;
  except
   on E: Exception do
    MessageDlg('Can not be opened, '+ E.message, mtError, [mbOK], 0);
  end;
  if MediaPlayer2.Error = 0 then
    MediaPlayer2.play;

أعيد ترميز MP3 باستخدام winlame. ويعمل. ما الذي تستخدمه لتشفير ملفات MP3 الخاصة بك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top