NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3422 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 6 از 6

موضوع: wave پلیر با Fatfs

  1. #1
    کاربر دائمی wantedboy آواتار ها
    تاریخ عضویت
    May 2011
    نام
    علی‏ ‏محمد‏ ‏شکرالهی
    نوشته ها
    492
    تشکر
    201
    تشکر شده 629 بار در 204 پست

    پیش فرض wave پلیر با Fatfs

    سلام دوستان
    دیدم کسی جواب نداد!
    گفتم خودم دست بکار بشم شروع به خوندن بیت به بیت یک فایل wave کردم.
    فعلا توانستم مشخصات یک فایل wave بدست آوردم.
    کد های این بخش براتون گذاشتم.
    قسمت بعد میریم برای پخشش😄
    کد:
    void load_header (void)	
    {             
    unsigned int CChunkSize,SamplingRate,BByteRate,SSubchunk2Size;
    int i;
    BYTE ChunkID[4];
    BYTE ChunkSize[4];
    BYTE Format[4];
    BYTE Subchunk1ID[4];
    BYTE Subchunk1Size[4];
    BYTE AudioFormat[2];
    BYTE NumChannels[2];
    BYTE SampleRate[4];
    BYTE ByteRate[4];
    BYTE BlockAlign[2];
    BYTE BitsPerSample[2];
    BYTE Subchunk2ID[4];
    BYTE Subchunk2Size[4];
    BYTE Data[1024];
    char buferr[12];
     FIL file;
    f_mount(0, &fs);	
    //res = f_open(&file,filename, FA_OPEN_EXISTING | FA_READ); 
    f_open(&file,"0:8bit.wav", FA_OPEN_EXISTING | FA_READ);
    f_read(&file,ChunkID,4, &br);
    f_read(&file,ChunkSize,4, &br);  
    f_read(&file,Format,4, &br);
    f_read(&file,Subchunk1ID,4, &br);  
    f_read(&file,Subchunk1Size,4, &br);  
    f_read(&file,AudioFormat,2, &br);  
    f_read(&file,NumChannels,2, &br);  
    f_read(&file,SampleRate,4, &br);  
    f_read(&file,ByteRate,4, &br);   
    f_read(&file,BlockAlign,2, &br);  f_read(&file,BitsPerSample,2, &br);  f_read(&file,Subchunk2ID,4, &br);  f_read(&file,Subchunk2Size,4, &br);  f_read(&file,Data,1024, &br);  
    f_close(&file);
    
    for(i=0;i<4;i++){
    sprintf(buferr,"%c",ChunkID[i]); DrawStringAt(0,i,buferr,WHITE,GetBkColor());
    								}
    								
    CChunkSize=LD_DWORD(ChunkSize);	sprintf(buferr,"ChunkSize:%d",CChunkSize);	
    DrawStringAt(1,0,buferr,WHITE,GetBkColor());
    
    for(i=0;i<4;i++){
    sprintf(buferr,"%c",Format[i]);	          	DrawStringAt(2,i,buferr,WHITE,GetBkColor());
    }
    for(i=0;i<4;i++){
    sprintf(buferr,"%c",Subchunk1ID[i]);
    DrawStringAt(3,i,buferr,WHITE,GetBkColor());								    }
    								
    sprintf(buferr, "Subchunk1Size:%d", Subchunk1Size[0]);         	DrawStringAt(4,0,buferr,WHITE,GetBkColor());
    
    sprintf(buferr, "AudioFormat:%d", AudioFormat[0]);	            DrawStringAt(5,0,buferr,WHITE,GetBkColor());
    sprintf(buferr, "NumChannels:%d", NumChannels[0]);  	        DrawStringAt(6,0,buferr,WHITE,GetBkColor());
    								
    SamplingRate=LD_DWORD(SampleRate);					sprintf(buferr,"SamplingRate:%d",SamplingRate);	  	            DrawStringAt(7,0,buferr,WHITE,GetBkColor());
    
    BByteRate=LD_DWORD(ByteRate);								sprintf(buferr,"ByteRate:%d",BByteRate);	  	            DrawStringAt(8,0,buferr,WHITE,GetBkColor());
    								
    sprintf(buferr, "BlockAlign:%d", BlockAlign[0]);	            DrawStringAt(9,0,buferr,WHITE,GetBkColor());
    
      sprintf(buferr,"BitsPerSample:%d",BitsPerSample[0];  	        DrawStringAt(10,0,buferr,WHITE,GetBkColor());
    							
    for(i=0;i<4;i++){
    sprintf(buferr,"%c",Subchunk2ID[i]);	  	         DrawStringAt(11,i,buferr,WHITE,GetBkColor()); //data
    }
    									SSubchunk2Size=LD_DWORD(Subchunk2Size);
    sprintf(buferr,"Subchunk2Size:%d",SSubchunk2Size;  	       DrawStringAt(12,0,buferr,WHITE,GetBkColor());	
    }
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 20141113_210413-1.jpg
مشاهده: 37
حجم: 119.1 کیلو بایت  
    ویرایش توسط wantedboy : 13-11-2014 در ساعت 22:37

  2. کاربران : 5 تشکر کرده اند از شما wantedboy برای ارسال این پست سودمند:


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #2
    کاربر دائمی wantedboy آواتار ها
    تاریخ عضویت
    May 2011
    نام
    علی‏ ‏محمد‏ ‏شکرالهی
    نوشته ها
    492
    تشکر
    201
    تشکر شده 629 بار در 204 پست

    پیش فرض

    سلام دوستان
    حالا برای خواندن دیتا ها به pwm احتیاج داریم.
    من یک مثال با توضیح در مورد pwm و مدهایش پیدا کردم.بعد باید بریم سراغ تنظیم کردنش برای پخش.
    https://translate.googleusercontent....Bu3g#timer_pwm
    ویرایش توسط wantedboy : 14-11-2014 در ساعت 16:07

  5. کاربران : 3 تشکر کرده اند از شما wantedboy برای ارسال این پست سودمند:


  6. #3
    کاربر دائمی wantedboy آواتار ها
    تاریخ عضویت
    May 2011
    نام
    علی‏ ‏محمد‏ ‏شکرالهی
    نوشته ها
    492
    تشکر
    201
    تشکر شده 629 بار در 204 پست

    پیش فرض

    سلام دوباره
    من فعلا کدها های pcm مربوط به یک فایل wave را بدست آوردم.
    بنظرتون باید این کد ها را داخل کدام قسمت تامیر و pwm قرار بدهم.
    این ک هم که گذاشتم.یک موج pwm یک کیلو هرتز با دیوتی سایکل 10 درصد تولید می کنه.
    کد:
    GPIO_InitTypeDef GPIO_InitStructure;
    
    TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure; 
    TIM_OCInitTypeDef TIM_OC_InitStructure; 
    
    System Init ();
    
    RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2, ENABLE); 
    
    GPIO_InitStructure GPIO_Mode = GPIO_Mode_AF_PP. 
    GPIO_InitStructure GPIO_Pin = GPIO_Pin_0. 
    GPIO_InitStructure GPIO_Speed ​​= GPIO_Speed_50MHz. 
    GPIO_Init (GPIOA, & GPIO_InitStructure); 
    
    TIM_TimeBase_InitStructure TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBase_InitStructure TIM_CounterMode = TIM_CounterMode_Up. 
    TIM_TimeBase_InitStructure TIM_Period = 999. 
    TIM_TimeBase_InitStructure TIM_Prescaler = 71. 
    TIM_TimeBaseInit (TIM2& TIM_TimeBase_InitStructure);
    
    TIM_OC_InitStructure TIM_OCMode = TIM_OCMode_PWM1. 
    TIM_OC_InitStructure TIM_OCIdleState = TIM_OCIdleState_Reset.
    TIM_OC_InitStructure TIM_OCNIdleState = TIM_OCNIdleState_Set. 
    TIM_OC_InitStructure TIM_OCPolarity = TIM_OCPolarity_High.
    TIM_OC_InitStructure TIM_OCNPolarity = TIM_OCNPolarity_High. 
    TIM_OC_InitStructure TIM_OutputState = TIM_OutputState_Enable.
    TIM_OC_InitStructure TIM_OutputNState=TIM_OutputNState_Disable.  
    TIM_OC_InitStructure TIM_Pulse = 100; 
    TIM_OC1Init (TIM2 & TIM_OC_InitStructure);
    TIM_Cmd (TIM2, ENABLE);
    فکر کنم کدها های مربوط به صوت باید داخل قسمت تعیین کننده ی دیوتی سایکل قرار بدهم.
    ولی فکر کنم این کافی نباشه!
    ویرایش توسط wantedboy : 14-11-2014 در ساعت 16:26

  7. کاربران : 3 تشکر کرده اند از شما wantedboy برای ارسال این پست سودمند:


  8. #4
    کاربر دائمی wantedboy آواتار ها
    تاریخ عضویت
    May 2011
    نام
    علی‏ ‏محمد‏ ‏شکرالهی
    نوشته ها
    492
    تشکر
    201
    تشکر شده 629 بار در 204 پست

    پیش فرض

    سلام دوستان.
    من یه برنامه نمونه ای که دیدم دو از دو مورد از مشخصات فایل wave استفاده کرده بود یکی
    sampeling rate و chunksize.
    دومی می دونم برای مقدار خواندن از کد های pcm استفاده میشه.
    در مورد اولی نمی دوم کجا باید تاثیرش بدم؟
    کسی در مورد این قسمت (پخش با pwm) اطلاعاتی نداره؟؟؟؟؟
    ممنون میشم دوستان

  9. تشکرها از این نوشته :


  10. #5
    کاربر فعال
    تاریخ عضویت
    Jul 2013
    نوشته ها
    153
    تشکر
    42
    تشکر شده 47 بار در 38 پست

    پیش فرض

    sampling rate
    نرخی هست که با اون نمونه برداری می شه.
    یعنی می گه هر چن ثانیه یه بار نمونه برداری شده.
    شما هم باید با همون فرکانس pwm بسازین تا بتونه باز سازی بشه.
    مثلا نمونه برداری می کنه و از 0 تا 99 یا از 0تا 255 مقدار می ده.
    خوب شما باید پشت سر هم دیتا رو تغییر بدین تا dc خروجی pwm بیفته دو سر بلندگو.
    معمولا نرخ نمونه برداری حدود 44800 هرتزه که تقریبا همون نرخ نایکوییسته.(2 برابر ماکسیمم فرکانس موجود در سیگنال که این جا سیگنال شما صوتیه و ماکسیمم فرکانس موجو در اون حدود 20khz هستش)

  11. کاربران : 2 تشکر کرده اند از شما vahid_22002 برای ارسال این پست سودمند:


  12. #6
    کاربر دائمی wantedboy آواتار ها
    تاریخ عضویت
    May 2011
    نام
    علی‏ ‏محمد‏ ‏شکرالهی
    نوشته ها
    492
    تشکر
    201
    تشکر شده 629 بار در 204 پست

    پیش فرض

    ممنون دوست عزیز
    مثلا برای نمونه اون عکس بالا 22050 sampel rate با توجه به صحبت شما یعنی هر 45 میلی ثانیه یکبار نمونه 8 بیت نمونه برداری می کنه.
    حالا به نظرتون من باید دو تا تایمر هم زمان فعال کنم که یکی برای هر 45 ثایمه و اون یکی برای pwn .
    حالا فرکانس اون چی باشه؟
    ویرایش توسط wantedboy : 15-11-2014 در ساعت 21:54

موضوعات مشابه

  1. مشکل با fatfs
    توسط jik در انجمن LPC series (NXP)
    پاسخ: 10
    آخرين نوشته: 15-12-2013, 23:28
  2. مشکل خواندن کاراکتر از فایل lpc1768 , fatfs
    توسط ashil2012 در انجمن LPC series (NXP)
    پاسخ: 2
    آخرين نوشته: 09-12-2013, 15:48
  3. Fatfs و فرمت کارت
    توسط nimaltd در انجمن میکرو کنترلر های 32 بیتی(arm)
    پاسخ: 2
    آخرين نوشته: 23-01-2013, 00:46
  4. wave player ساخت
    توسط jordan77 در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 22-05-2012, 21:35
  5. wave player با spi سخت افزاري
    توسط M.ABDOLLAHI در انجمن AVR
    پاسخ: 1
    آخرين نوشته: 12-08-2011, 16:23

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •