لماذا قمت بنسخ قرص مضغوط 300 مرة

أقوم بجمع الموسيقى: أشتري الأقراص المضغوطة وأرقمنها باستخدام نسخة صوتية دقيقة ومسح أغلفة وإدخالات. في بعض الأحيان ليس من السهل إذا تم إصدار القرص المضغوط في إصدار محدود في الخارج قبل 10 سنوات. أصعب شيء هو إذا كان القرص المضغوط به عيب في التصنيع - ولا يمكن قراءة بعض المسارات.

ألبوم ترتيب البيانو Altneuland 帰 る べ き 城 أصدر في 2005. لقد عثرت عليه بعد ثلاث سنوات (ربما على YouTube) ، وقمت بتنزيل أفضل نسخة - ووضعها في قائمة المشتريات المستقبلية. جعلت التطورات الأخيرة في تكنولوجيا البريد الدولي من الممكن شراء قرص مستعمل العام الماضي. لسوء الحظ ، لا يمكن لأي من محركات الأقراص المضغوطة قراءة المسار رقم 3. يحدث هذا غالبًا عند شراء الأقراص القديمة ، خاصةً عندما مروا عبر مركز الشحن الدولي USPS. لقد وضعتها جانبًا وبدأت أبحث عن نسخة أخرى وجدتها الشهر الماضي. وصل يوم الجمعة - وحاولت على الفور تمزيقه. ولكن مع دفع نفس الخطأ بالضبط . يبدو أن هذه ليست مسألة تآكل أو تلف - ربما خرج القرص معيبًا من المصنع.

إضافة: بعد التحقيق ، لم أعد أعتقد أن هذا عيب في المصنع. عندما أكتب بداية أو نهاية مسار سيئ إلى قرص مضغوط فارغ ونسخه ، فإن الكسارة تنتج نفس الخطأ! جربها بنفسك مع ملف min.flac .

هناك خياران متبقيان: إما أن تحاول يومًا ما العثور على نسخة أخرى سيتم نسخها بنجاح (غير مرجح) ، أو بطريقة ما استعادة بيانات الصوت الأصلية من الأقراص التالفة. أنت تعرف بالفعل الخيار الذي اخترته.

كيف يعمل الكسارة



تعذر على EAC قراءة المسار رقم 3 من القرص [帰 る べ き 城]

تقوم الأقراص المضغوطة بتخزين البيانات الرقمية ، ولكن هناك واجهة تناظرية تمامًا بين الأقراص والليزر والثنائيات الضوئية. تحدث أخطاء في القراءة لأسباب مختلفة: وسائط متسخة ، خدوش على الطبقة الواقية من البولي كربونات ، اهتزاز محرك الأقراص نفسه. تساعد رموز تصحيح الخطأ البدائية في معيار CDDA على تقليل تشويه الصوت على الأقراص التي نادرًا ما تستخدم ، ولكنها غير قادرة على استعادة تدفق البتات بالكامل على قرص مضغوط مع عدد كبير من الأخطاء. تعمل الكسارات الحديثة على حل المشكلة بطريقتين مهمتين للكشف عن الأخطاء: القراءة الزائدة و AccurateRip.

تصف صفحة EAC: Extraction Technology كيف تنتج EAC قراءات زائدة:

في الوضع الآمن ، يقرأ البرنامج كل قطاع مرتين على الأقل [...] في حالة حدوث خطأ (قراءة أو مزامنة) ، يستمر البرنامج في قراءة هذا القطاع حتى 8 محاولات من أصل 16 متطابقة. يتم تنفيذ هذا الإجراء مرة واحدة على الأقل ، ثلاث أو خمس مرات (وفقًا للجودة المحددة لاسترداد الخطأ). لذا في أسوأ الحالات ، تتم قراءة القطاعات السيئة 82 مرة!

كل شيء بسيط. إذا كان طلب القراءة يعرض أحيانًا بيانات غير صحيحة ، فقم بقراءتها مرة أخرى ، ثم كن حذرًا بشكل خاص إذا كانت القراءة الأولى تعطي نتائج مختلفة. يستخدم AccurateRip نفس المبدأ ولكن بطريقة موزعة: يرسل كسارات مجموعة من الملفات الصوتية المنسوخة إلى هذه الخدمة. الفكرة هي أنه إذا نسخ ألف شخص مسارًا بنفس القطع ، فمن المحتمل أن يكون هذا هو التمزق الصحيح.

تتناول هذه المقالة ما يجب فعله إذا لم تتمكن كلتا الطريقتين من المساعدة. لا تعطي EAC نتيجة إذا أعادت كل قراءة بيانات مختلفة ، وفي قاعدة بيانات AccurateRip يوجد سجل واحد فقط حول قرص نادر [1] .

"لقد تجاوزت عشرة آلاف مقطع ، عشرة آلاف مقطع لرؤيتك"



محركات الأقراص الضوئية Asus و LG و Lite-On و Pioneer و OEM غير معروف

إذا لم يتم نسخ القرص المضغوط ، فمن المنطقي استخدام محرك أقراص مختلف. في بعض الأحيان يكون نموذج معين أكثر تنازلاً لمواصفات CDDA ، أو هل هناك برامج ثابتة أفضل لإصلاح الأخطاء ، أو أي شيء آخر. يحتوي منتدى DBpoweramp على تصنيف دقة محرك الأقراص المضغوطة / أقراص الفيديو الرقمية لتحديد محرك الأقراص المضغوطة الأكثر ملاءمة.

في صباح السبت ، اشتريت خمسة محركات أقراص مضغوطة جديدة من شركات تصنيع مختلفة [2] ، جربت جميعهم - ووجدت واحدة قادرة على الحفاظ على التزامن على مسار ضربات. لسوء الحظ ، لا يمكن الحصول على تأكيد النسخ - بين كل التمزقات كان هناك حوالي 20000 بايت مختلفة.

ولكن الآن كان لدي ملفات .wav على القرص ، ويمكنك الاستفادة من ذلك. اعتقدت أن أخطاء القراءة على مسار سيئ تقع بالقرب من المسار "الصحيح". لذلك ، من المنطقي إجراء عدة مزقت والعثور على قيمة "إجماع" للبايتات غير المستقرة. كان هذا النهج ناجحًا في نهاية المطاف ، لكنه يتطلب الكثير من العمل أكثر مما توقعت.

"الكمية تدخل إلى الجودة"


لقد بدأت بنسخ القرص بشكل متكرر على أحد محركات الأقراص ، وكتابة جميع القيم لكل بايت وإعلان الخطأ "قابل للتصحيح" إذا أنتج أكثر من نصف التمزقات قيمة بايت محددة لهذا الموضع. كانت البداية جيدة: انخفض عدد الأخطاء غير القابلة للتصحيح من حوالي 6900 بايت تقريبًا عند N = 4 إلى ~ 5000 بايت عند N = 10. انخفضت فائدة كل مزق إضافي بمرور الوقت ، حتى استقر عدد الأخطاء غير القابلة للاسترداد عند 3700 تقريبًا بحوالي N = 80. توقفت عن تمزيق N = 100.


الأخطاء الثابتة والقاتلة على عدد التمزق

ثم حاولت نسخ القرص 100 مرة على محرك الأقراص الثاني واستخدام بطاقتي تصحيح "لملء" مواضع الخطأ غير القابلة للتصحيح من محرك الأقراص الأول. لكنها لم تنجح: في كل محرك أقراص كان هناك الآلاف من التصحيحات التي لا تتوافق مع التصحيحات على الأخرى! اتضح أنه لا يمكن التخلص من الضوضاء عن طريق دمجها مع مصدر ضوضاء آخر ولكن ذي صلة.


الشيء نفسه ، ولكن لاثنين من أقراص التحقق من الصحة

الفن الحرفي




هناك مورد جيد آخر على موقع EAC: اختبار جودة DAE ، الذي يحدد جودة البرامج الثابتة لمحرك الأقراص حسب مستوى الأخطاء التي يتم إصلاحها. يعد هذا خطأ في المستوى الأدنى عندما يقوم محرك الأقراص بتصحيح أخطاء القراءة بدلاً من مجرد الإبلاغ عنها. تتمثل المشكلة في أن "الوضع الآمن" في EAC لا يتوفر إلا عند تعطيل رمز تصحيح الخطأ المضمن هذا ، مما يشير إلى أنه لا يعمل بشكل صحيح.

أعددت الاختبار عن طريق نسخ ملف .wav إلى CD-R ، مع تسليط الضوء على القطاع الدقيق على سطح البيانات ورسمه بعناية بعلامة سوداء. هذه أخطاء فادحة مضمونة على نمط قطعي.

اختبرت جميع محركات الأقراص وحصلت على نتيجتين مثيرتين للاهتمام:



استخدمت محرك Lite-On للتغلب على أخطاء المزامنة. كان يمضغ بسحر العلامة السحرية بسرور ، لكنه كان مرتبكًا للغاية من الخطوط المستقيمة على سطح البيانات. يمكنك أن ترى أنه بدلاً من ثلاث قمم منفصلة على اليمين هناك نقطة فاشلة عملاقة واحدة.

Errors total Num : 206645159
Errors (Loudness) Num : 965075 - Avg : -21.7 dB(A) - Max : -5.5 dB(A)
Error Muting Num : 154153 - Avg : 99.1 Samples - Max : 3584 Samples
Skips Num : 103 - Avg : 417.3 Samples - Max : 2939 Samples

Total Test Result : 45.3 points (of 100.0 maximum)




حصل محرك بايونير على أعلى نقاط DAE. في رأيي ، لا يبدو الرسم البياني خاصًا ، لكن أداة التحليل قالت إن هذا هو أفضل برنامج ثابت لإصلاح الأخطاء في مجموعتي الصغيرة.

Errors total Num : 2331952
Errors (Loudness) Num : 147286 - Avg : -77.2 dB(A) - Max : -13.2 dB(A)
Error Muting Num : 8468 - Avg : 1.5 Samples - Max : 273 Samples
Skips Num : 50 - Avg : 6.5 Samples - Max : 30 Samples

Total Test Result : 62.7 points (of 100.0 maximum)


"من لحظة معينة ، الأعداد مهمة"


كيفية استخدام البرامج الثابتة بايونير مع تصحيح خطأ جيد إذا تجاهلته "الوضع الآمن" EAC؟ بسيط جدًا: قم بتحويل EAC إلى "وضع الاندفاع" واكتب على القرص تدفق البت في الشكل الذي تقوم البرامج الثابتة بالإبلاغ عنها. كيف يمكن بعد ذلك تحويل هذه المجموعة من ملفات wav. التي لم يتم التحقق منها إلى ملف عالي الجودة ، كما هو الحال في "الوضع الآمن"؟ نعم ، نفس أداة تحليل الأخطاء التي استخدمناها في التشققات مع Lite-On!

بعد بضعة إعدادات لتهيئة EAC وبعد مائة مزق ، نحصل على مثل هذا المخطط الجميل.


أخطاء ثابتة وغير قابلة للتصحيح على عدد التمزقات (بايونير)

ما يمكن ملاحظته:

  • تميل أخطاء البتات المميتة بسرعة إلى الصفر ، لكنها لا تصل إليها أبدًا.
  • قفزة كبيرة في البق الثابت في 53-54 مزق.
  • لا يتغير عدد الأخطاء قبل وبعد هذه القفزة الكبيرة عمليًا ، مما يشير إلى مناطق الاستقرار في البيانات المنسوخة.

0xA595BC09


باستخدام تصحيح خطأ شبه مثالي من بايونير ، قمت بإنشاء ملف "أفضل تخمين" وبدأت مقارنته مع مزقت بايونير. كما هو متوقع ، تم اكتشاف العديد من الأقسام منخفضة الجودة ، والتي قمت بتصحيحها عن طريق عمل 10 مزقات أخرى:

$ for RIP_ID in $(seq -w 1 100); do echo -n "rip$RIP_ID: "; cmp -l analysis-out.wav rips-cd1-pioneer/rip${RIP_ID}/*.wav | wc -l ; done | sort -rgk2 | head -n 10
rip054: 2865
rip099: 974
rip007: 533
rip037: 452
rip042: 438
rip035: 404
rip006: 392
rip059: 381
rip043: 327
rip014: 323


لقد وجدت أيضًا شيئًا مثيرًا للاهتمام حقًا: أنتجت عدة مزق نفس المحتوى بالضبط ! تذكر ، هذا هو بالضبط معيار النجاح في EAC "الوضع الآمن". shncat -q -e | rhash --print="%C" shncat -q -e | rhash --print="%C" لحساب المجموع الاختباري CRC32 لبيانات الصوت الخام: وهو ما تستخدمه EAC.

$ for wav in rips-cd1-pioneer/*/*.wav; do shncat "$wav" -q -e | rhash --printf="%C $wav\n" - ; done | sort -k1
[...]
9DD05FFF rips-cd1-pioneer/rip059/rip.wav
9F8D1B53 rips-cd1-pioneer/rip072/rip.wav
A2EA0283 rips-cd1-pioneer/rip082/rip.wav
A595BC09 rips-cd1-pioneer/rip021/rip.wav
A595BC09 rips-cd1-pioneer/rip022/rip.wav
A595BC09 rips-cd1-pioneer/rip023/rip.wav
A595BC09 rips-cd1-pioneer/rip024/rip.wav
A595BC09 rips-cd1-pioneer/rip025/rip.wav
A595BC09 rips-cd1-pioneer/rip026/rip.wav
A595BC09 rips-cd1-pioneer/rip027/rip.wav
A595BC09 rips-cd1-pioneer/rip028/rip.wav
A595BC09 rips-cd1-pioneer/rip030/rip.wav
A595BC09 rips-cd1-pioneer/rip031/rip.wav
A595BC09 rips-cd1-pioneer/rip040/rip.wav
A595BC09 rips-cd1-pioneer/rip055/rip.wav
A595BC09 rips-cd1-pioneer/rip058/rip.wav
AA3B5929 rips-cd1-pioneer/rip043/rip.wav
ABAAE784 rips-cd1-pioneer/rip033/rip.wav
[...]


وفي الوقت نفسه ، سمحت لنا مزقت متكرر للأقسام منخفضة الجودة بإكمال التحليل بدون أخطاء فادحة. وعندما راجعت هذا الملف ، كان هناك بالضبط نفس المحتوى الصوتي الموجود في مزق "العادي"! هذا يكفي لإعلان النصر.

أنا متأكد بنسبة 99٪ من نجاحي في نسخ هذا القرص المضغوط الذي يحتوي على مشكلات ، و 0xA595BC09 هو مبلغ CRC الصحيح للمسار رقم 3.

الملحق أ: قارن


لقد استخدمت هذه الأداة لحساب أخطاء البايت المحتملة. إنه غير مخصص للاستخدام على المدى الطويل ، لذلك فهو قبيح قليلاً ، ولكن قد يكون من المثير للاهتمام لأولئك الذين تعثروا في هذه الصفحة ، حل المشكلة نفسها.

 extern crate memmap; use std::cmp; use std::collections::HashMap; use std::env; use std::fs; use std::sync; use std::sync::mpsc; use std::thread; use memmap::Mmap; const CHUNK_SIZE: usize = 1 << 20; fn suspect_positions( mmaps: &HashMap<String, Mmap>, start_idx: usize, end_idx: usize, ) -> Vec<usize> { let mut positions = Vec::new(); for ii in start_idx..end_idx { let mut first = true; let mut byte: u8 = 0; for (_file_name, file_content) in mmaps { if first { byte = file_content[ii]; first = false; } else if byte != file_content[ii] { positions.push(ii); break; } } } positions } fn main() { let mut args: Vec<String> = env::args().collect(); args.remove(0); let mut first = true; let mut size: usize = 0; let mut files: Vec<fs::File> = Vec::new(); let mut mmaps: HashMap<String, Mmap> = HashMap::new(); for filename in args { let mut file = fs::File::open(&filename).unwrap(); files.push(file); let mmap = unsafe { Mmap::map(files.last().unwrap()).unwrap() }; if first { first = false; size = mmap.len(); } else { assert!(size == mmap.len()); } mmaps.insert(filename, mmap); } let (suspects_tx, suspects_rx) = mpsc::channel(); let mut start_idx = 0; let mmaps_ref = sync::Arc::new(mmaps); loop { let t_start_idx = start_idx; let t_end_idx = cmp::min(start_idx + CHUNK_SIZE, size); if start_idx == t_end_idx { break; } let mmaps_ref = mmaps_ref.clone(); let suspects_tx = suspects_tx.clone(); thread::spawn(move || { let suspects = suspect_positions(mmaps_ref.as_ref(), t_start_idx, t_end_idx); suspects_tx.send(suspects).unwrap(); }); start_idx = t_end_idx; } drop(suspects_tx); let mut suspects: Vec<usize> = Vec::with_capacity(size); for mut suspects_chunk in suspects_rx { suspects.append(&mut suspects_chunk); } suspects.sort(); println!("{{\"files\": ["); let mut first_file = true; for (file_name, file_content) in mmaps_ref.iter() { let file_comma = if first_file { "" } else { "," }; first_file = false; println!("{}{{\"name\": \"{}\", \"suspect_bytes\": [", file_comma, file_name); for (ii, position) in suspects.iter().enumerate() { let comma = if ii == suspects.len() - 1 { "" } else { "," }; println!("[{}, {}]{}", position, file_content[*position], comma); } println!("]}}"); } println!("]}}"); } 

1. في سجل AccurateRip المفرد هذا ، يطابق CRC لجميع المسارات باستثناء المسار رقم 3 القرص الخاص بي: المجموع هو 0x84B9DD1A ولدي 0xA595BC09. أظن أن الكسارة لم تفهم أن لديه محرك سيئ. [عودة]

2. السؤال الواضح عند شراء محرك أقراص مضغوطة أو أقراص DVD في عام 2018 هو: "اللعنة ، أين يمكنني شراؤها؟" ولم أكن بحاجة إلى واحد ، بل عدة علامات تجارية مختلفة . أعرف متجرًا واحدًا قريبًا به 5.25 بوصة من محركات أقراص DVD. ومتجر واحد فقط كبير بما يكفي لعدم الندم على مساحة الرف لمحركات الأقراص هذه ، وغريبًا بما يكفي حتى لا يبدو في مكانه. بالطبع ، أنا نتحدث عن Frys Electronics. [العودة]

Source: https://habr.com/ru/post/ar418995/


All Articles