Cute, STM32, پروژه, پروژه های سیسوگ, توصیه شده, کتابخانه برنامه نویسی, مقاله

همه چیز درباره دیکد نرم‌افزاری MP3 به کمک میکروکنترلر – سورس کد – شماتیک

مقدمه

 

در مقاله‌ی پیشین (فایل MP3 چیست و از کجا آمده است)، به چگونگی پیدایش فایل های MP3  ، مزیت‌ها و قابلیت‌های آن پرداختیم. در این مقاله قصد داریم که ساز و کار و نحوه دکد و پخش فایل های MP3 را تشریح کنیم. همانطور که در مقاله‌ی قبلی اشاره شد، فایل mp3 بر خلاف فایل های wav جهت کاهش حجم فایل صوتی، دست به فشرده‌سازی و رمزگذاری صدا می‌زند و آن را به بخش‌ها‌ی کوچکی که فریم نام دارد می‌شکند.

برای این که بتوانیم خروجی مناسب صوتی داشته باشیم؛ باید قادر باشیم که فریم‌های مجزا را در زمان مناسبی از حالت فشرده خارج کنیم و برای پخش به واحد دیجیتال به آنالوگ بفرستیم و هیچ وقفه‌ای هم نباید وجود داشته باشد تا قعطی و پرش در صوت ایجاد نشود. با توجه به قابلیت‌ها‌ی میکروکنترلر‌ها‌ی قدیمی، این امکان وجود نداشت؛ چرا که به دلیل محدودیت‌ها‌ی حافظه و پردازشگر، سرعت تبدیل فریم‌ها به فایل خام، پایین‌تر از بیت‌ریت پخش صوت بود و همین امر باعث می‌شد که این نوع میکروکنترلر‌ها قادر به پخش این‌گونه فایل ها نباشند. برای رفع این نقص، شرکت‌ها‌ی تولید کننده چیپ، دست به کار شدند و دکدر سخت افزاری خود را وارد بازار کردند. اغلب استفاده کننده‌ها برای پخش فایل‌های صوتی با فرمت MP3 دست به دامن این گونه چیپ‌ها می شدند.

یکی از شرکت‌های شناخته‌شده در خصوص تولید چیپ های دکدر، شرکت VLSI است که به واسته چیپ VS1003 در ایران محبوبیت زیادی پیدا کرد. با استفاده از این چیپ، پخش‌کننده همراه و غیرهمراه بسیاری طراحی شد.

به عنوان نمونه عکس زیر که به کمک همین چیپ و میکروکنترلر AVR ، یک پخش‌کننده MP3 قابل‌حمل ساخته شده است.

با این وجود، این گونه طراحی، مشکلات خاص خودش را به همراه داشت. از جمله حجیم شدن مدار، مصرف انرژی بیشتر، بالا رفتن قیمت تمام‌شده و ….. اما چاره‌ی دیگری وجود نداشت و استفاده از این نوع چیپ ها اجتناب‌ناپذیر بود.

تا این که میکروکنترلرهای ARM معرفی شدند که علاوه بر مصرف پایین، سرعت پردازشی به مراتب بالاتر داشتد. میزان حافظه و سرعت پردازش بالای این خانواده از میکروکنترلر، امکان دکد و پخش مستقیم فایل mp3 را ایجاد کرد؛ به نحوی که برای دکد و پخش، نیاز به هیچ المان خارجی نباشد و تمام فرایندها در درون خود میکروکنترلر میسر باشد.

 

 

استخراج فریم‌ها

تا اینجا با ساختار کلی فایل MP3 آشنایی پیدا کردیم. برای شروع فرایند دکد و پخش، اولین قدم پیدا کردن فریم‌ها و استخراج آن‌ها از فایل است. همان‌طور که می‌دانید یک فایل MP3 از مجموعه‌ای از فریم‌های صوتی تشکیل شده است.

همان‌طور که در عکس بالا مشاهده می‌کنید، هر فریم داده دارای هدری است که علاوه بر مشخص کردن شروع یک فریم، مجموعه‌ای از اطلاعات در خصوص آن فریم را نیز دارد. برای روشن‌تر شدن موضوع به عکس زیر دقت کنید:

هر فریم دارای جزئیات فوق است که 32 بیت (4 بایت) اول اطلاعات سینک و هدر را در خود دارد. 16 بیت (2 بایت) بعد، حاوی اطلاعات اعتبار سنجی است که به صورت اختیاری است، یعنی ممکن است وجود نداشته باشد.  136/256 بیت بعدی حاوی اطلاعات مربوط به کانال صوتی است؛ (همان‌طور که میدانید یک فایل صوتی ممکن است منو یا استریو باشد) و مابقی داده‌ها مربوط به داده‌های صوتی است.

برای این که بتوانیم داده‌های صوتی را از حالت فشرده و رمز شده خارج کنیم، لازم است اول اطلاعات مربوط به فریم را از هدر استخراج کنیم و بر اساس داده‌های به دست آمده، رمزگشایی داده‌های صوتی را شروع کنیم.

دکد Mp3 – رمز‌گشایی هدر MP3

همان‌طور که قبلاً اشاره کردیم، هدر حاوی 32 بیت است که هر بیت معنی و مفهوم خاص خود را دارد. اگر بیت‌ها را به تفکیک و رنگ مرتبط با معنی آنها دسته‌بندی کنیم، نتیجه به شکل زیر خواهد بود:

AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM

  •  11 بیت (A)  (از بیت 21 تا 31) : بیت‌های شناسایی (همه 1 هستند) که برای تشخیص شروع یک فریم به کار برده می‌شوند.
  • 2 بیت (B) (بیت 20 و 19) : ورژن هدر که حاوی 4 حالت است:
    • 00 – MPEG Version 2.5
    • 01 – reserved
    • 10 – MPEG Version 2
    • 11 – MPEG Version 1
  • 2 بیت (C) (بیت 18 و 17): توضیح دهنده لایه:
    • 00 – reserved
    • 01 – Layer III
    • 10 – Layer II
    • 11 – Layer I
  • 1 بیت (D) (بیت 16): بیت اعتبار‌سنجی
    • 0 : قسمت CRC وجود خواهد داشت.
    • 1 : قسمت CRC وجود نخواهد داشت.
  • 4 بیت (E) (از بیت 12 تا 15) : بیت‌ریت خروجی (مطابق جدول زیر)

  • دو بیت (F) (بیت 10 و 11) : سمپل‌ریت مطابق جدول زیر.

  • بیت (G) (بیت شماره 9) : Padding bit
    • 0 – frame is not padded
    • 1 – frame is padded with one extra slot
  • بیت (H) (بیت 8) : Private bit. This one is only informative.
  • 2 بیت (I) (بیت 6 و 7) : Channel Mode
    • 00 – Stereo
    • 01 – Joint stereo (Stereo)
    • 10 – Dual channel (2 mono channels)
    • 11 – Single channel (Mono)
  • 2 بیت (J) (بیت 4 و 5) : Mode extension (Only used in Joint stereo)
  • بیت (K) (بیت 3) : Copyright
    • Audio is not copyrighted
    • Audio is copyrighted
  • بیت (L) (بیت 2) : Original
    • 0 – Copy of original media
    • 1 –  Original media
  • 2 بیت (M) (بیت 0 و 1) : Emphasis

 

بعد از چهار بایت توصیف‌کننده هدر، بنا به وضعیت بیت D در این توصیف‌کننده، ممکن است که یا 2 بایت CRC وجود داشته باشد یا نه. بعدازاین دو بایت اختیاری، طبق فریم که تک کانال باشد یا دو کانال (دو بیت 6, 7)، 17 یا 32 بایت اطلاعات مربوط به کانال‌ها وجود خواهد داشت و بعدازآن داده‌های صوتی قرار خواهند داشت. دقت داشته باشید در شرایط خیلی نادر ممکن است که فریم دارای داده‌های صوتی نباشد. در عکس زیر یک فریم را درون یک فایل MP3 مشخص کرده‌ایم که 4 بایت قرمزرنگ، هدر و 32 بایت آبی‌رنگ، اطلاعات کانال می‌باشد. بقیه‌ی بایت‌ها هم داده‌های صوتی هستند. توجه داشته باشید که بایت‌های مربوط به خطایابی وجود ندارند.

 

دکد Mp3 – رمز‌گشایی داده‌ها‌ی صوتی

برای رمزگشایی داده‌های موجود در این قسمت اول لازم است با الگوریتم هافمن آشنایی داشته باشیدِ؛ روش کدگذاری هافمن یک روش فشرده‌سازی داده است که توسط دیود هافمن پایه‌گذاری شد. در روش هافمن داده‌ها 20 الی 90 درصد فشرده می‌شوند. در الگوریتم هافمن از ساختمان داده‌ی صف اولویت استفاده می‌شود. توضیح نحوه‌ی عملکرد الگوریتم هافمن در این مقاله نمی‌گنجد و علاقه‌مندان جهت یادگیری می‌توانند به وب‌سایت های مربوطه مراجعه کنند.

برای دکدینگ این قسمت همان‌طور که در عکس مشخص شده است، باید از درخت هافمن استفاده کنید.

 

نحوه ساخت یک ماژول MP3 Player

توضیح سخت‌افزار

همان‌طور که در تصویر زیر مشخص شده است، سخت‌افزار مورداستفاده جهت دکد فایل MP3، یک سخت‌افزار بسیار ساده است که جزء اصلی آن را یک میکروکنترلر STM32F103RET تشکیل داده است. تمام اتفاقات درون میکروکنترلر رخ می‌دهد.

برای تبدیل داده‌های دیجیتال از مبدل‌های دیجیتال به آنالوگ (DAC) داخلی میکروکنترلر استفاده شده که قادر است نرخ یک مگاسمپل بر ثانیه و دقت 12 بیت را ارائه نماید. کارت حافظه هم با استفاده از رابط SPI به میکروکنترلر وصل شده است. درواقع تلاش شده که تا جای ممکن مدار، ساده و قابل‌فهم باشد.

نرم‌افزار

نرم‌افزار توسط کامپایلر کیل نوشته شده و قادر است فایل‌های MP3 تا بیت ریت 320 کیلو و فایلهای Wav را تا بالاترین بیت‌ریت ممکن پخش نماید. برای سرعت عمل بیشتر در دکد فایل‌های MP3، بخشی از کد به زبان اسمبلی نوشته شده است. تا حد ممکن سعی شده که از منابع موجود بهترین استفاده برده شود. برای انتقال داده‌های صوتی به مبدل‌های DAC، از واحد DMA استفاده شده تا CPU کمترین درگیری را در این انتقال داشته باشد.

مطابق برنامه‌ی فوق، بعد از نصب و پیکربندی کارت حافظه، برنامه ابتدا به دنبال فایل start.mp3 درون کارت حافظه می‌گردد. در صورت وجود چنین فایلی آن را اجرا کرده و بعد از اتمام، به دنبال فایل start.wav می‌گردد تا آن را پخش نماید.

شما به‌راحتی با اضافه کردن توابع و بخش‌های موردنظر خود، می‌توانید این کد را تبدیل به یک Mp3 Player  همراه کنید.

 

دانلود سورس کد دکدر MP3

Sisoog_STM32_Mp3Player (17685 دانلود ها)

دانلود فایل PDF این متن

PDF ساخت MP3 Player (929 دانلود ها)

 



انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.  همکاری با سیسوگ

 

نوشته های مشابه

یک دیدگاه در “76”

  1. Avatar reza گفت:

    عرض سلام وخسته نباشید خدمت جناب زئوس
    من سعی کردم این برنامه رو با توابع HAL پیاده سازی کنم اما ارور گرفت،شمابا توابعHAL این برنامه رو پیاده دسازی نکردین.

    1. زئوس Zeus زئوس Zeus گفت:

      سلام – دوست عزیز
      خوب این برنامه مروبط به 5 سال پیش است حدودا و اون موقع خبری از HAL نبود – هرچند اگر میخواستم دوباره این برنامه رو بنویسم فطعا از HAL استفاده نمی کردم یا با همین SPL رو استفاده میکردم یا از LL استفاده میکردم
      HAL سربار زیادی میذاره روی پردازنده باری به هر جهت ؛ فکر نمیکنم برای استفاده از HAL مشکلی وجود داشته باشه ؛ فقط کافیه توایع رو بازنویسی کنید.

  2. Avatar سام گفت:

    سلام لطفا لینک را تصحیح کنید تا 26% دانلود میشه بعد ارور data corruption میده!

    1. Avatar سام گفت:

      درست شد با IDM مشکل داشت !

      1. زئوس Zeus زئوس Zeus گفت:

        ممنون برای اطلاع رسانی تون ؛ IDM همیشه دردسر ساز بوده :/

    2. زئوس Zeus زئوس Zeus گفت:

      سعی کنید بدون استفاد از دانلود منیجر دانلود کنید با کمک خود مرورگر

  3. Avatar مهدی گفت:

    سلام و سپاسگزاری از نوشته های خوبی که به اشتراک می گذارید
    لینک دانلود “سورس کد دکدر MP3” مشکل دارد و کامل دانلود نمی شود .

    1. Sisoog Os Sisoog Os گفت:

      سلام و ممنون از شما
      لینک مشکلی نداره بررسی شد
      البته دو بار زیپ شده که لازمه دوبار باز بشه و با نرم افزار 7zip میتونید باز کنید

  4. Avatar rezanaghshiy گفت:

    سلام ممنون میشم در مورد استفاده از DMA و نحوه استفادش در این مثال بیشتر توضیح بدین.

    1. زئوس Zeus زئوس Zeus گفت:

      در واقع DMA بایت های صدا رو از حافظه RAM برمیداره و توی DAC قرار میده ؛ ریت کپی دیتا هم توسط یه تایمر مشخص میشه !
      برای شروع لازم نیست که از dma استفاده کنید و این کار رو میتونید توسط یه تایمر و اینتراپت اون انجام بدید ؛ من از DMA استفاده کرد تا لود روی CPU کاهش پیدا کنه ولی خوب برای شروع میشه ازش صرف نظر کرد.

  5. Avatar rezanaghshiy گفت:

    سلام،با تشکر از مطالب مفیدتون
    می خواستم در مورد ارسال فایل صوت به واحدDACتوضیحی بدین، وچرا داخل پروژه فایل STM32 Cube mx نیست
    تا بدونم چه پایه هایی رو استفاده کردین.
    واین که صوت رو به چه صورت به کد تبدیل کردین ونحوه استفاده از این کد ها به چه صورته.

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و درود
      کتابخانه های مورد استفاده در این پروژه SPL هست که احتمالا دیگه توسط st پشتیبانی نمیشه ؛ البته من این پروژه رو بدون استفاده از Cube Mx نوشتم برای همینه که توابع مورد نظرتون رو نمیتونید پیدا کنید.
      صوت بعد از دکد توی یه بافر توی رم نگه داری میشه و با ریت مشخصی به DAC توسط DMA ارسال میشه ؛ یعنی یه بافر الاکلنگی توی رم داریم که متناوبا داره توسط dma به dac منتقل میشه و با خالی شدن هر بخش ؛ اون بخش توسط CPU و دکدر صوت مجددا پر میشه

  6. Avatar rezanaghshiy گفت:

    یه دار تقویت صوت با lm386گذاشتم به پایه دک ولی میکروم سوخت.

    1. زئوس Zeus زئوس Zeus گفت:

      😐 ؛ نمیتونه دلیل سوختن میکرو اتصال آمپلی فایر باشه ؛ آمپلی فایر روی ورودی خودش خازن داره !
      احتمالا مشکل از جای دیگه ای باشه ؛ مدارتون رو قرار بدید تا بتونم نظر بهتری بدم

  7. Avatar rezanaghshiy گفت:

    سلام،ممنون میشم یه مدار پخش صوت مناسب بهم معرفی کنید وبه چه صورت به میکرو وصل بشه که خروجی صدا داشته باشم.

    1. زئوس Zeus زئوس Zeus گفت:

      الان ماژول های پخش صوت زیادی به صورت آماده در بازار موجود است که ابعاد کوچکی دارند
      البته به شخصه باهاشون کار نکردم ولی فکر نمیکنم کار کردن باشون خیلی سخت باشه
      مثلا ماژول DFPlayer

  8. احمد . احمد . گفت:

    سلام
    با توجه به این که dac در lpc1768 فقط یک خروجی دارد و حداکثر update rate آن ۱مگاهرتز است و همچنین ۱۰بیتی است مشکلی در کدگشایی و پخش صدا به وجود نمی‌آید؟

    1. زئوس Zeus زئوس Zeus گفت:

      نه ریت 1 مگ که ریت بالایی است ؛ ولی احتمالا برای صوت استریو دچار مشکل بشید ؛ مگر این که از pwm برای ساخت کانال دیگه اسنفاده کنید
      ده بیت هم اوکیه و کیفیت قابل قبولی رو ارائه میکنه.

  9. Rezanaghshe Rezanaghshe گفت:

    وچرا سر مدار بلند گو تعبیه نشده

    1. زئوس Zeus زئوس Zeus گفت:

      طرح برای جایی بوده که خودش آمپلی فایر داشته ؛ اینطور به نسبت توانی که لازمه میتونید آمپلی فایر رو طراحی کنید.

  10. Rezanaghshe Rezanaghshe گفت:

    سلام
    سوالی برام پیش اومده
    ممنون میشم در مورد قسمت بوت بیشتر توضیح بدید.

    1. زئوس Zeus زئوس Zeus گفت:

      بوت ، تنها کاربردش پروگرام کردن میکروکنترلر STM32 هست اگر بخوایم از پروگرارم SWD استفاده نکنیم و از طریق پورت سریال پروگرام رو انجام بدیم

  11. Avatar rezanaghshiy گفت:

    سلام
    ممنونم از مطالب خوبتون،می خواستم بپرسم قسمت بوت برای چه کاریه،مگه پایه بوت به زمین وصل نمیشه،هدر بوت چه کاربردی داره.

    1. زئوس Zeus زئوس Zeus گفت:

      نه لذوما ؛ این کار باعث میشه شما قادر باشید برنامه رو از طریق Uart هم آپلود کنید برای مواقعی که نخواید از SWD استفاده کنید یا در دسترستون نباشه

  12. Avatar محمد گفت:

    درود
    من سورس این mp3 player رو با آی سی dac به شماره pt8211 که یه مبدل r2r ladder هستش تست کردم با i2s و dma … بعد تو فایل mp3.c این خط باید حذف میشد تا برنامه به درستی کار میکرد
    AudioBuffer[j]=(unsigned short)AudioBuffer[j] ^ (unsigned short)0x8000;
    در کل کیفیتش از dac خود میکرو بهتر هست ولی اگه راهی بود که نمونه های خروجی تابع mp3decode از 16 بیت بیشتر میشد اون موقع با یه dac با رزولوشن 24 بیت میشد ازش خروجی با کیفیت بالا گرفت .

    1. زئوس Zeus زئوس Zeus گفت:

      بسیار عالی 🙂
      خوب البته خیلی بهتر میشد ولی کیفیت 16 بیت هم کیفیت بالایی هست 🙂 ؛ متاسفانه میکروی 103 دیگه توان پردازشی لازم برای دکد صوت 24 بیت رو نداره البته فکر میکنم ram لازم رو هم نداشته باشه.
      متشکر برای اطلاع رسانیتون ^_^

  13. احمد . احمد . گفت:

    سلام
    چطور میتونم از این کد برای lpc1768 استفاده کنم؟

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      با سادگی تمام ! تنها کافیه که قسمت های ارتباط با سخت افزار رو تغییر بدید ؛ مثل قسمت خوندن از کارت حافظه و البته پخش فایل های صوتی که از DMA و DAC استفاده شده ؛ باقی قسمت ها به سادگی فایل کامپایل هستند و جای نگرانی نیست

      1. احمد . احمد . گفت:

        میشه کد lpc1768ش را هم بگذارید؟

        1. زئوس Zeus زئوس Zeus گفت:

          والا برد راه انداز برای LPC1768 ندارم اگر نه تبدیلش کار چندانی نداره.

      2. احمد . احمد . گفت:

        سلام
        میشه کد lpc1768ش را هم بگذارید؟
        اگر نمیشه لطفا دقیق تر توضیح دهید که کدام قسمتها را باید تغییر بدهم. (فقط قسمت DAC.c را باید تغییر بدهم؟) با stm32 هم آشنایی ندارم.

        1. زئوس Zeus زئوس Zeus گفت:

          سلام ، اگر بتونم یه برد راه انداز برای LPC1768 پیدا کنم ؛ تبدیلش کاری نداره
          شما باید تمام قسمت هایی که با سخت افزار در ارتباط هست رو باز نویسی کنید
          ولی هسته دکدر نیاز به تغییر خاصی نخواهد داشت و به شکل کامل کار خواهد کرد.

          1. احمد . احمد . گفت:

            میشه دقیقتر توضیح بدید؟
            دقیقا از کجا شروع کنم و چطوری برم جلو؟
            لطفا جوری توضیح بدید که من هم که مبتدی هستم بتونم در عمل پیاده کنم…

          2. زئوس Zeus زئوس Zeus گفت:

            خوب شما باید شروع کنید تا متوجه منظورم بشید ؛
            ببیند بخش هایی که به وابسته به سخت افزار هست توی کد به خوبی مشخص هست ؛ یخش هایی مثل راه اندازی کارت حافظه – مبدل های دیجیتال به آنالوگ – تایمر ها و کنترل پورت ها مثل سریال و GPIO این بخش ها رو که تغییر بدید کلید کد به خوبی کار خواهد کرد و احتمالا دغدغه ای نمی مونه 🙂

  14. Avatar محمد گفت:

    درود
    برنامه روی میکروی stm32f105rbt6 اجرا شد و کیفیتش در حد قابل قبول هست البته اگه از یک dac به دقت 16 بیت با dma استفاده میشد با ارتباط i2s کیفیت خیلی بالاتر از این بود.امکانش هست که این کدها رو روی سری stm32f207 که cortex m3 هم هستن اجرا کرد یا کد اسمبلی باید تغییر کنه.
    با تشکر

    1. زئوس Zeus زئوس Zeus گفت:

      خیلی هم عالی 🙂 ؛ خوب بله البته همینطوره که میگید ولی سعی کردم تا جای ممکن از امکانات خود میکرو استفاده کنم تا ساخت نمونه اولیه خیلی ساده بشه
      در مورد این که روی میکروی مورد نظرتون بخواید ران کنید ؛ باید بگم که هیچ مشکلی نیست چون هسته ها یکی هستند مشکلی پیش نمیآد

  15. Avatar میثم رستم زاده گفت:

    سلام با تشکر از مطالب خوبتون. بنده هم با دو اینترنت مختلف ایرانسل و adsl چک کردم سورس کد دانلود نمیشد لطفا بررسی کنید با تشکر فراوان…

    1. Sisoog Os Sisoog Os گفت:

      دوست عزیز من بررسی کردم هیچ مشکلی نداره
      اگر حل نشد به تلگرام سیسوگ مراجعه کنید تا مورد شما به دقت بررسی بشه

  16. Avatar دانیال گفت:

    سلام وقت بخیر ، ظاهرا لینک دانلود سورس کد خرابه

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      هم اکنون دو لینک موجود در پست چک شد و مشلی مشاهده نشد.

  17. احسان عسگری احسان عسگری گفت:

    سلام
    با تشکر از مطالب خوب و کاربردیتون
    من پروژه رو مطابق شماتیک بستم
    اما پیغام زیر رو میده
    àZeus@sisoog.com
    Play:start.mp3
    –Faild
    Try Play:start.wav –Faild
    فرمت میکرو اس دی fat32 هستش
    و داخل اون هم فرمت wav هستش و هم mp3

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      اول این که اسم فایل ها رو باید start.mp3 و start.wav بگذارید
      فایل های mp3 تا بیت ریست 128 کیلو پشتیبانی میشه
      به غیر از این دو مساله – نکته دیگه ای وجود نداره ، فقط ممکنه قسمت sd کارت درست نباشه و فایل sd رو نشناسه

  18. Avatar علی گفت:

    درود بر شما مهندس
    من یه مشکلی با رنگ نوشته های سایت دارم خیلی کم رنگ هست وبیشتر وقتها خواندن مطالب سخت هست البته نمیدونم شاید چون با موبایل وارد سایت میشوم اینطوری هست!
    در هر صورت مطالب سایت شما واقعا غنی میباشد.

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیزم
      ممنونم برای نظر سازنده شما ، تا حالا به این موضوع دقت نکرده بودیم ، توی موبایل نوشته های سیاه کامل نیستند و بیشتر خاکستری هستند ، این موضوع رو بررسی و رفع خواهیم کرد.
      انتقادات و نظرات شما ، باعث دلگرمی و ارتقاء ما خواهد شد.

      1. Avatar محمد گفت:

        بله، کلا رنگ متن های اصلی سایت خاکستریه که یه مقدار خواندنو سخت می کنه. چه با موبایل و چه با کامپیوتر. اگر رنکشو مثل رنگ همین کامنت در حین نوشتن مشکی کنید خیلی بهتره.
        سپاس بابت زحماتتون در این سایت خوب

        1. زئوس Zeus زئوس Zeus گفت:

          سپاس دوست عزیز – حتما این مساله رو بررسی و رفع خواهیم کرد.

  19. Avatar علی گفت:

    سلام
    خیلی عالی بود اگه میشه لطف کنید درباره ی اینکه چطور mp4 رو میشه دیکد کرد توضیح بدید

    1. زئوس Zeus زئوس Zeus گفت:

      سلام متشکرم
      بله حتما توی دستور کار قرار می دیم

  20. Avatar اسی گفت:

    سلام
    من با کیوب کار میکنم . زیاد از برنامه تون سر در نیاوردم راستش . ولی تو شماتیک دیدم که دو تا dacفعال هست . یعنی اینکه دوتا کانال دارید که همزمان میتونه دوتا صدا رو پخش کنه؟
    ای کاش وقت داشتید با توابع حال این برنامه رو انجام میدادید.
    امیدوارم موفق باشید

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      بله هر دور DAC فعال است که برای پخش صوت های stereo لازم است که دو کانال چپ و راست را به صورت مجزا پخش نماییم ؛ در واقع یعنی همون دو صوت مختلفی که فرموردید
      خوب توابع HAL به لحاظ پرفرمنسی مقداری کند هستند البته نمی دونم سرعت لازم برای این برنامه رو فراهم می کننده یا خیر
      متاسفانه فرصت چنین کاری رو فعلا نداریم !

      1. Avatar اسی گفت:

        من میخوام این برنامه رو با توابع hal بنویسم , اگر موفق بشم در اختیارتون قرار میدهم که در سایت قرار دهید . فقط یه لطفی کنید کتابخانه ها را به ایمیلم بفرستید که من بتونم روش کار کنم ./ البته برنامه رو دانلود کردم کتابخانه ها رو دیدم ولی متوجه نشدم کدوم برای cimsis میباشد . و کدوم برای دیکدmp3نوشته شده است
        با تشکر فراوان

        1. زئوس Zeus زئوس Zeus گفت:

          بسیار عالی ، کل سورس کد برنامه توی دسترس قرار داره و به راحتی میتونید از توی سایت دانلود کنید.
          از طریق فولدر بندی به راحتی مشخص هست توابعی که مربوط به دکد mp3 هست
          اگر سوالی بود – حتما مطرح کنید.

  21. Avatar علی زارع گفت:

    سلام
    میشه لطف کنید یه کم درباره ی دیکد کردن فایل های ویدئویی مثل mp4 h264 توضیح بدید

    1. زئوس Zeus زئوس Zeus گفت:

      کدک h264 یه کدک سنگین هست که فکر نمیکنم دکد اون با ریت بالا از عهده یه پردازنده M4 هم بر بیاد
      معمولا برای دکد این کدک های پیچیده ، از واحد های سخت افزاری استفاده می کنند
      شاید با سری های M7 چنین امکانی وجود داشته باشه که واحد Jpeg رو به صورت داخلی پشتیابنی می کنند.

  22. Avatar سینا ج گفت:

    سلام
    خیلی ممنون بابت پست های عالی ای که میذارید!
    یک سوال داشتم!
    من در حال حاضر دارم از لینوکس با توزیع debian استفاده میکنم. تونستم با موفقیت STM32Cube و gcc arm و پکیج های مورد نیاز برای کامپایلر رو نصب کنم. اما نمیدونم از چه IDE برای برنامه نویسی استفاده کنم (طبق پرس و جو هایی که کردم گفتن Eclipse خوبه اما نمیدونم از کجا باید دانلود کنم) و چطور تنظیمش کنم که به کامپایلر لینک بشه. همچنین نمیدونم برای ارتباط STLink با لینوکس باید درایوری نصب کنم یا نه. اگر ممکنه راهنمایی کنید. ممنون.

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و درود خدمت شما دوست عزیز
      خوب برای نصب Eclipse دو راه هست یکی این که از مخازن debian استفاده کنید که معمولا ورژن های قدیمی قابل نصب هستند از این طریق ، و یا این که اخرین ورژن رو دانلود کنید و با استفاده از Openjre نصب کنید ، از اونجایی که STM32Cube رو باز کردید پس ابزار Open-jre بر روی سیستمتون نصب هست.
      برای دانلود آخرین ورژن Eclispe می تونید به این آدرس مراجعه کنید. فقط دقت داشته باشید اگر با لینوکس برید لینک دانلود لینوکسی بهتون میده و این که حتما ورژن C/C++ رو دانلود کنید.
      بعد از حالت فشرده خارج کنید و اجرا کنید به همین راحتی
      برای استفاده از ابزار های Programmer می تونید از Openocd استفاده کنید که تقریبا همه پروگرامر های موجود را پشتیبانی میکنه.
      اگر سوالی بود باز مطرح کنید حتما

      1. Avatar سینا ج گفت:

        آهان. ممنون از جوابتون. خودم یکم تحقیق کردم و دیدم شرکت st یه ide برای لینوکس تولید کرده به اسم system workbench که الان آخرین نسخش ۶ هست (البته دقیق نمیدونم خود st تولید و طراحیش کرده باشه یا نه ولی همه جاش لوگوی شرکتشون هست).اون رو نصب کردم و داخل خودش toolchain های آرم رو هم داشت و با موفقیت کد رو کامپاید و با stlink آپلود کرد. احتمالا وقتی رفتم سراغ lpc دوباره بیام دنبال نصب eclipse … بازم ممنون از کمکتون.

        1. زئوس Zeus زئوس Zeus گفت:

          خواهش میکنم ، خوب ادیتور ارائه شده از سمت شرکت ST پایه Eclipse هست و یه سری تنظیمات و شخصی سازی ها برای سادگی کار انجام دادن
          فکر کنم شرکت NXP هم همین کارو کرده و اونم ادیتوری با همین شکل داده باشه
          ولی اگر از Eclipse استفاده کنید ، قادر به کامپایل برای تمام خانواده آرم هستید.

  23. Avatar محمد گفت:

    فقط احتمالا برای حمل بر روی میکروی M4 شاید نیاز باشه برخی بخش ها رو که اسمبلی نوشته شده باز نویسی کنید.
    =============
    درود بر شما
    دقیقا مشکل من هم همین قسمت هستش.الان اگه کد اصلی رو از helix دانلود کنم کد اسمبلی دارن یا نه؟ اصلا این کدی که به صورت اسمبلی نوشته شده مربوط به چه قسمتی هستش .
    با تشکر

    1. زئوس Zeus زئوس Zeus گفت:

      خوب دوست عزیز ، من کمی اینترنت رو جستجو کردم ، خوشبختانه این همین کتابخونه برای میکروی 407 موجود هست و میتونید از این لینک دانلود کنید.
      خوب البته برنامه با GCC نوشته شده 🙂
      قسمتی که اسمبلی نوشته شده برای دکد هافمن هست و برای سرعت بالاتر با اسمبلی باز نویسی شده ، فکر کنم سورس اصلی به زبان سی موجود باشه ولی دقت داشته باشید ممکنه سورس سی سرعت لازم برای پخش بدون وقفه رو نداشته باشه ، و باز ممکنه توی میکروی 407 مشکل سرعت وجود نداشته باشه.
      اگر موفق شدید دانسته هاتون رو با ما به اشتراک بذارید.

  24. Avatar محمد گفت:

    درود
    کیفیت صدای ایجاد شده از این mp3 پلیر اونهم با dac 12 بیت خود میکرو چطور هست یعنی میتونه آهنگای با کیفیت 320 رو هم پخش کنه.راستی امکانش هست این برنامه رو روی میکروی stm32f205 یا stm32f405 با همین سورس کد اجرا کرد.

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      دقت 12 بیت ، برای صوت دقت خوبی هست و شاید هر کسی قادر به شناسایی اختلاف بین 16 بیت و 12 بیت نبااشه ، در ضمن بیشتر صوت های موجود 8 بیتی هستند.
      این کد با بیت ریت 320 مشکلی نداره و به خوبی کار میکنه ، تا اونجا که خاطرم هست و این که وقتی این کد با میکروی 103 داره کار میکنه به راحتی قادره توی سری های بالاتر اجرا بشه و مشکلی وجود نداره ، فقط احتمالا برای حمل بر روی میکروی M4 شاید نیاز باشه برخی بخش ها رو که اسمبلی نوشته شده باز نویسی کنید.

  25. Avatar سجاد گفت:

    سلام مجدد ببخشید میخواستم بدونم ممکنه همین پروژه رو با استفاده از توابع هال قرار بدین ؟

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      با توجه به فشردگی کار ها متاسفانه امکانش برامون فراهم نیست ، ولی اگر قصد دارید از این پروژه توی پروژه ای که از HAL استفاده می کنید بهره ببرید میتونید کتابخونه های مورد نیاز رو به پروژتون اضافه کنید فکر نمیکنم مشکلی پیش بیاد.

  26. Avatar سجاد گفت:

    یه سوال اگر بخوام یک دفعه وسط پخش آهنگ پخش قطع شه و یک شماره اعلام کنم و آهنگ رو از ادامه پخش کنم چطوری باید عمل کنم ؟
    یعنی مثل توی آسانسور که آهنگ داره میخونه شماره اعلام میشه و بعد دوباره ادامه آهنگ رو میخونه

    با سپاس فروان و آرزوی موفقیت برای تیم سیسوگ

    1. زئوس Zeus زئوس Zeus گفت:

      به چند روش میشه انجام داد این کارو !
      روش پیشنهادی من اینه که از یه کانال دیگه برای پخش شماره ها استفاده کنید ، بعد خروجی ها رو با هم میکس کنید که صدای اعلام گر بر روی صدای موزیک بیفته
      البته راه دیگه ای هم هست و اون این که پخش mp3 رو که با یه تایمر زمان بندی شده متوقف کنید و صوت مورد نظرتون رو پخش کنید بعد دوباره تایمر رو اجرا کنید.
      اگر شماره ها به صورت Wav ذخیره شده باشند آسون تره ولی اگه mp3 باشن ، باید موقعیت موزیک در حال رو ذخیره کنید ، بعد دوباره از همون محل شروع به پخش کنید ، قبلا توضیح دادیم که فایل فریم فریم هست ، شماره فریم جاری رو ذخیره می کنید ، فایل مورد نظرتون رو پخش می کنید ، دوباره از همون فریم پخش رو ادامه می دهید.

  27. Avatar بهروز گفت:

    ممنون عالی بود

    1. زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم دوست عزیز

  28. Sajjad Azadfalah سجاد گفت:

    یه سوال آیا خروجی ما در اینجا فقط حاوی نیم موج مثبته ؟ نمیشه هر دو نیم موج رو داشت ؟

    1. زئوس Zeus زئوس Zeus گفت:

      خیر، خروجی به صورت تمام موج هست ، در واقع برای این که تمام موج رو داشته باشیم ما ولتاژ 1.65 رو به عنوان صفر در نظر گرفتیم که ولتاژ خروجی به صورت تمام موج وجود داشته باشه
      و برای حذف ولتاژ DC از یک خازن استفاده میکنیم

      1. Sajjad Azadfalah سجاد گفت:

        خوب اگر بخوام نیم موج منفی رو هم داشته باشم باید با یک OPAMP ولتاژ رو شیفت بدم درسته ؟ راه دیگه ای نیست ؟

        1. زئوس Zeus زئوس Zeus گفت:

          نه دوست عزیز نیازی نیست ! اگر قصد تقویت سیگنال رو داشته باشید نیاز به آپمپ هست
          در غیر این صورت خروجی DAC شکل موج کامل رو خواهد داشت
          روی این لینکخروجی DAC موج سینوسی کلیک کنید.

          1. Sajjad Azadfalah سجاد گفت:

            خیلی ممنون من میدونم خروجی نیم موج منفی رو با آفست میبینیم اما من میخوام نیم موج منفی واقعا منفی باشه نمیدونم میتونم درست منظورم رو برسونم

          2. زئوس Zeus زئوس Zeus گفت:

            ببینید بعد از خازن همونطور که توی شماتیک هست ، واقعا نیم موج منفی خواهید داشت. یعنی ولتاژ منفی وجود خواهد داشت.
            میتونید با اسیلوسکپ چک کنید.

  29. Sajjad Azadfalah سجاد گفت:

    مرسی مرسی عالی بود

    1. زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم دوست عزیز

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *