الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن التعامل مع الملفات الصوتية بال C#

مغلق
بدأه MagicShark في 5 يناير 2006 · 21 رد · 2,251 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته ....

أرجو التكرم بالإجابة على سؤالي ... و هو في حال تعاملي مع ملفات صوتية بالـ

Windows Application With C#.NET أو بالـC# عموماً , عملت إنشاء لملف صوتي اسمه

"sound.WAV" بحيث أعمل لوب تمر على ملفات صوتية مخزنة لدي , ثم نعمل تذييل لها واحدة تلو الأخرى لتضاف إلى الملف sound و بعد انتهاء اللوب نعمل قراءة لـsound فيكون تركيب من كل الملفات السابقة , باستخدام المفتاح F10 لاحظت أن هذه الملفات فعلاً تمر عليها اللوب و لكن المشكلة أن sound يضاف إليه فقط أول ملف تمر عليه اللوب مع العلم أنني كتبت FileMode.Append ......

ملاحظة : sound يتم إنشاءه أثناء الـRun داخل المجلد Debug ....

شكراً جزيلاً لكل منسوبي الموقع و المعذرة على إزعاجي لهم بأسئلتي .... (h)

#2

ممكن توضح اكثر

#3
KARIMSOFT كتب:
ممكن توضح اكثر

أقصد أنني أستخدم Array of string بحيث عن طريق لوب أخزن في كل index ملف صوتي بمساره ثم أنشيء ملف صوتي اسمه sound أخزن فيه هذه الملفات الصوتية واحد تلو الآخر لكن المشكلة أنه لا يخزن به سوى الملف الموجود بأول index

و لدي مشكلة أخرى و هي أنني أنشأت زر فتح بحيث عن طريق النقر عليه تفتح قائمة بالملفات النصية في الكمبيوتر و أختار أحدها لأنقل بياناته على textBox في الـ Form و لكنه لا ينقل سوى الملفات الإنجليزية أما العربية فلا ينقل بياناتها ..

شكراً جزيلاً لمساعدتك ....

أرفقت الأكواد في ملفين منفصلين ....

_______.txt

______.txt

#4

المشكله الاولي

 fsw = new FileStream("sound.WAV", FileMode.Create);
  fsw.Close();
 int i;
fsw = new FileStream("sound.WAV", FileMode.Append , FileAccess.Write);

 for(i=0;i<trying;i++)
 { 
if( File.Exists(Sound))
  {
  fsr = new FileStream(Sound,FileMode.Open);
 fsr.Read(SoundBuffer,0, (int) fsr.Length);
  fsw.Write(SoundBuffer, 0, (int) fsr.Length);
  fsr.Close();
  }
  else
  {
  MessageBox.Show(Sound + "File does not exist !");
  }
fsw.Close();

تم تعديل هذه المشاركة بواسطة romanof في 7 يناير 2006 في 06:57

#5

المشكلة الثانية

if(openFileDialog1.ShowDialog()==DialogResult.OK)
 	 {
    System.IO.StreamReader sr=new System.IO.StreamReader (openFileDialog1.FileName,System.Text.Encoding.Default);
    textBox1.Text = sr.ReadToEnd();
    textBox1.Show();
    sr.Close();
 	 }

تم تعديل هذه المشاركة بواسطة romanof في 7 يناير 2006 في 06:58

#6
KARIMSOFT كتب:
المشكلة الثانية

if(openFileDialog1.ShowDialog()==DialogResult.OK)
  	{
    System.IO.StreamReader sr=new System.IO.StreamReader (openFileDialog1.FileName,System.Text.Encoding.Default);
    textBox1.Text = sr.ReadToEnd();
    textBox1.Show();
    sr.Close();
  	}

#7
MagicShark كتب:

فعلاً لا أعرف كيف أشكر حضرتكم على هذا المجهود الذي تبذله و لا أعرف كيف أعبر عن امتناني و جزيل شكري .. و لكن مازالت المشكلة الأولى لم تحل لأن الملف sound يخزن فيه أول صوت فقط ..

كما أنني وضعت

()fsw.Close بعد نهاية اللوب أرجو أن تساعدني في حل ذلك و إن كان الكود أراه صحيحاً و منطقياً ...

#8

ممكن ترفق الملف كي اري ما به

#9

أرفقت الكود الذي يخص المشكلة التي تحدثت عنها ...

شكراً جزيلاً ....

_______2.txt

#10

اريد البرنامج لا الكود يك يمكنني التجربة

#11

لقد استخمت لحل هذه المشكلة ثلاثة طرق ستجدها في الكود

ملاحظة : هذا الكود يعتمد على كلاس طويل اسمه TTS , الغرض منه أ يخزن في الـarray التي اسمها phonemicBuffer أسماء الملفات الصوتية , هذا الكلاس يعمل بشكل صحيح و قد تأكد من ذلك بعدة الطرق وكما أخبرتك فإن المشكلة تبدأ في اللوب التي بعدها نعمل قراءة للأصوات معاً ..

------------------------

كذلك أرجو من حضرتكم أن تساعدني في مشكلة اكتشفت و جودها و هي أنني و ضعت زرين أحدهما يفتح الملفات النصية و ينقل ما بها إلى textBox ثم يقوم الكلاس TTS بتخزين أسماء الملفات الصوتية المقابلة لكل حرف , راقبت ذلك بالذاكرة و وجدت أن التخزين يتم بشكل صحيح و لكن الصوت لا يخزن أصلاً حتى صوت الحرف الأول إلا إذا كان هذا الملف موجود في مجلد الـDebug , بينما إذا كتبت الكلمة بنفسي على الـtextBox يخزن صوت الحرف الأول و هي المشكلة التي أخبرتك عنها مسبقاً .... بمعنى لو كان الملف المراد فتحه موجود في Debug فإنه يعطي نفس النتيجة فيما لو كتبت الكلمة بنفسي , بينما لو كان على سطح المكتب مثلاً فإنه يفتح و تحلل حروفه بشكل صحيح عن طريق كلاس TTS بينما الملفات الصوتية يذكر اسمها بشكل صحيح و لكن يقول إنها غير موجودة كلها حتى الملف الصوتي الأول , و كأن مسار الملف النصي المفتوح يؤثر على مسار الملف الصوتي المطلوب استدعاءه ... مع العلم أن مسار هذه الملفات الصوتية واحد و هو المجلد الذي يوجد فيه المشروع ...

-----------------------------

لدي زر آخر هو زر حفظ عندما أكتب شيء على الـtextBox و أحفظه من خلال هذا الزر ثم أحاول فتحه ثانية باستخدام زر فتح فإنه يظهر على شكل رموز حاولت استخدام الحل الذي ذكرته لي سابقاً بزر الفتح لكنني لم أفلح في تكطبيقه على زر حفظ بينما و الحمد لله نجح في زر فتح ...

---------

فكرة البرنامج هي textBox نكتب عليه نص أو بزر فتح نفتح ملف نصي مخزن بالكمبيوتر, ثم نخزن في مصفوفة اسم الملف الصوتي المقابل لكل حرف و هذا عمل الكلاس TTS و نستدعي هذه الملفات من مجلد به ملف صوتي لكل حرف بحركته , ثم نحفظ النص المنطوق بزر حفظ على أنه ملف نصي ...

-------------------

ملاحظة هذا مشروع Text To Speech ( ناطق آلي ) بالعربي

و هو مشروع تخرج و لا أستطيع تزويدك سوى بالـ Form التي توجهني فيها المشاكل ..

و لكن إذا كنت ترغب بالاطلاع على المشروع كاملاً فأرجو من حضرتكم أن تذكر لي إيميلك لأنني لا أستطيع نشر المشروع كاملاً على المنتدى أرجو أن تقدر ذلك .. مع كامل شكري وتقديري لجهودك ..

Form1.zip

تم تعديل هذه المشاركة بواسطة MagicShark في 8 يناير 2006 في 04:09

#12

ممكن تبعت المكتبة بتاعت TTSلاني مش وجدها

karimsoft@msn.com

#13

أرسلته و أنا في انتظار أي استفسار أو ملاحظة في أي وقت ... و جزاك الله خير الجزاء عني و عن مجموعتي التي تعمل معي ...

شكراً لحضرتكم ...

#14

و قد أرسلت لك الملفات الضرورية كي يعمل معك الـAgent و هو " جني "

#15

أرجو أن تطلعني ماذا حصل معك ....

شكراً ...

#16

الجز الاول انتهاء من زمان وانا معتكف علي مشكله الدمج لا افعل في حياتي سوي الصلاه ومشكلتك وافطار الصيام

#17

شكراً جزيلاً .. و لكن أرجو أن تتكرم بالاطلاع على الإيميل .....

فعلاً اللي نصحوني بالانضمام لهذا المنتدى قدموا لي خدمة جليلة و باب علم عظيم

..........................

#18

أنا أصلاً كتبت الكود هكذا :

WAVSounds ws = new WAVSounds();

for( i=0;i<trying;i++)

ws.Play(Sound, ws.SND_FILENAME | ws.SND_SYNC | ws.SND_RESOURCE);

-----------------------------------------------

و لكن الدكتور يقول إنه بهذه الطريقة الأصوات تكون فيها تقطيع و لهذا السبب فكرنا باستخدام

MemoryStream

أو

FileStream

المهم إن الأصوات تكون مع بعض ككتله واحدة

بحيث لو مثلاً جعلناها في ملف صوتي واحد و ليكن

sound

سنعمل استدعاء مرة واحدة و لا تكون هناك فترة زمنية بين كل صوت و الآخرو باتالي يكون أداء النطق أفضل يعني نسمع الأصوات خلف بعض بسرعة و كأنها صوت كامل و ليس أصوات مركبة , و لأن هذه الطريقة لم تنجح فكرت في أن أخزن الأصوات كلها في مصفوفة من نوع الملفات الصوتية

WAV

أو

WAVSounds

بحيث تكون الملفات نفسها متوفرة أثناء الـ

RUN

في الـ

RAM

المشكلة لو كانت فكرتي صحيحة لا أعرف كيف أخزن الملفات الصوتية نفسها و ليس مسارها في مصفوفة

......................................

ستجد هذه المقالة على الإيميل أيضاً .........

تم تعديل هذه المشاركة بواسطة MagicShark في 10 يناير 2006 في 01:39

#19

هل ترى أن فكرتي سليمة .. أم أن هناك طريقة أفضل ....

و كل عام و أنت بخير

.........

#20

لا تشغل بالك فاني اعطيت الود 2 مبرمج يعملون في هذا المجال ولا كن علي مسال بعيد وهوم يسخبروني بالناتج وموضوعك بامان لا تقلق غير اني ارسل لمشرفيفين في #C BV اكثر من واحد لطلب الكود ننتظر

ولكن انت من اين واي كلية انتع

#21

شكراً جزيلاً .... و لكن أرغب في أن أخبرك أنني وجدت هذا المشروع في موقع

www.codeproject.com

من خلال الرابط http://www.codeproject.com/cs/media/wavemixer.asp

و هو يتحدث عن إمكانية تغيير الـHeader للملفات الصوتية بحيث نجعل الـCannonical Format يتغير لتذييل ملفات صوتية للملف الحالي ...

و لكن إصدار برنامج المصمم أحدث من إصدار برنامجي .. المهم أنني أفتح كل كلاس لوحده و أحاول أن أفهمه .. إذا تكرمت حاول أن تطلع عليه و إذا توصلت لشيء أخبرني من فضلك ....

مع كامل شكري و تقديري لحضرتكم ...

WaveMixer_src.zip

تم تعديل هذه المشاركة بواسطة MagicShark في 12 يناير 2006 في 19:40

#22

السلام عليكم ورحمة الله وبركاته

اسف في عدم الرد عليك لاني اقوم بانزال vs.net2005 لقراءة المثال الاخير باذن الله اليوم اجد حل

اسف للتاخير

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…