国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA開發(fā):音樂播放器

這篇具有很好參考價(jià)值的文章主要介紹了FPGA開發(fā):音樂播放器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

相關(guān)閱讀?

FPGA開發(fā)專欄https://blog.csdn.net/weixin_45791458/category_12388695.html?spm=1001.2014.3001.5482


? ? ? ? FPGA開發(fā)板上的蜂鳴器可以用來播放音樂,只需要控制蜂鳴器信號(hào)的方波頻率、占空比和持續(xù)時(shí)間即可。

1、簡(jiǎn)譜原理

? ? ? ? 簡(jiǎn)譜上的4/4表示該簡(jiǎn)譜以4分音符為一拍,每小節(jié)4拍,簡(jiǎn)譜上應(yīng)該也會(huì)標(biāo)注每分鐘多少拍。音符時(shí)值對(duì)照表如下圖所示,這表示了每個(gè)音符的演奏時(shí)長(zhǎng)。

FPGA開發(fā):音樂播放器,FPGA開發(fā),fpga開發(fā)????????音符是記錄音的高低和長(zhǎng)短的符號(hào),簡(jiǎn)譜中的音符是七個(gè)阿拉伯?dāng)?shù)字,它們是:1(Do)、2(Re)、3(Mi)、4(Fa)、5(Sol)、6(La)、7(Ti),為了標(biāo)記更高或更低的音,則在基本符號(hào)的上面或下面加上小圓點(diǎn)。在簡(jiǎn)譜中,不帶點(diǎn)的基本符號(hào)叫中音。記在簡(jiǎn)譜基本音符號(hào)下面的小圓點(diǎn),叫低音點(diǎn),它表示將基本音符降低一個(gè)音組,即降低一個(gè)純八度。在基本符號(hào)下面加一個(gè)點(diǎn)叫低音,加兩個(gè)點(diǎn)叫倍低音,加三個(gè)點(diǎn)叫超低音。記在簡(jiǎn)譜基本音符號(hào)上面的小圓點(diǎn),叫高音點(diǎn),它表示將基本音符升高一個(gè)音組,即升高一個(gè)純八度。在基本符號(hào)上面加一個(gè)點(diǎn)叫高音,加兩個(gè)點(diǎn)叫倍高音,加三個(gè)點(diǎn)叫超高音

? ? ? ? 音符所對(duì)應(yīng)的頻率如下表所示。

音符 頻率
低音1 261Hz
低音2 293Hz
低音3 329Hz
低音4 349Hz
低音5 392Hz
低音6 440Hz
低音7 499Hz
中音1 523Hz
中音2 587Hz
中音3 659Hz
中音4 698Hz
中音5 784Hz
中音6 880Hz
中音7 998Hz
高音1 1046Hz
高音2 1174Hz
高音3 1318Hz
高音4 1396Hz
高音5 1568Hz
高音6 1760Hz
高音7 1976Hz

2、結(jié)構(gòu)設(shè)計(jì)

2.1、按鍵消抖模塊

? ? ? ? 由于要是用按鍵控制音樂開始播放,所以需要一個(gè)按鍵消抖模塊,具體可以在FPGA開發(fā):按鍵消抖一文中找到。

Debounce debounce_0
(
    .clk             (clk),
    .rst             (rst_n),
    .button_in       (button_in),
    .button_out      (button_out)
);

? ? ? ? 同時(shí)我們還需要一個(gè)邊沿檢測(cè)的機(jī)制來保證一次按下只觸發(fā)一次按鍵操作。

always @ (posedge clk or posedge rst)begin
	if(rst == 1'b1)begin
		button_out_d0 <= 1'b1;
		button_negedge <= 1'b0;
	end
	else begin
		button_out_d0 <= button_out;
		button_negedge <= button_out_d0 & ~button_out;
	end	
end

2.2、ROM模塊

? ? ? ??使用ROM保存音符時(shí)長(zhǎng)和音調(diào),創(chuàng)建ROM的過程可以根據(jù)不同的FPGA開發(fā)環(huán)境而定,如果是Quartus的話步驟如下:

? ? ? ? 首先新建兩個(gè)個(gè)MIF文件,它們是用來初始化ROM的,如下圖所示。

FPGA開發(fā):音樂播放器,FPGA開發(fā),fpga開發(fā)

? ? ? ? ?根據(jù)你的簡(jiǎn)譜長(zhǎng)度,設(shè)置深度,如下圖所示。

FPGA開發(fā):音樂播放器,FPGA開發(fā),fpga開發(fā)

? ? ? ? 隨后根據(jù)簡(jiǎn)譜填入對(duì)應(yīng)信息并保存,如下圖所示。?

FPGA開發(fā):音樂播放器,FPGA開發(fā),fpga開發(fā)

? ? ? ? 接著在IP窗口搜索ROM IP,如下圖所示。

FPGA開發(fā):音樂播放器,FPGA開發(fā),fpga開發(fā)

? ? ? ? ?選好模塊名和HDL類型并保存,這里選擇Verilog HDL,如下圖所示。

FPGA開發(fā):音樂播放器,FPGA開發(fā),fpga開發(fā)

? ? ? ? 在ROM創(chuàng)建菜單中選擇創(chuàng)建的ROM大?。ㄟ@里應(yīng)該要和剛才的MIF文件一致),如下圖所示。

FPGA開發(fā):音樂播放器,FPGA開發(fā),fpga開發(fā)

? ? ? ? 在初始化界面,選擇使用剛才創(chuàng)建的MIF文件并Finish即可完成ROM的創(chuàng)建,如下圖所示。

2.3、頻率譯碼模塊

? ? ? ? ?規(guī)定中音1使用十進(jìn)制數(shù)11表示,而低音1使用01表示,中音2使用12表示。譯碼模塊根據(jù)對(duì)應(yīng)的音符頻率,輸出相應(yīng)的周期,其中CLK_FRE根據(jù)開發(fā)板的頻率而定。

module music_hz(
input  [7:0]  hz_sel,
output reg [19:0] cycle
);

parameter CLK_FRE = 50 ;

  always @(*)begin
    case(hz_sel)
      8'h01   : cycle = CLK_FRE*1000000/261  ;  //low 1         261Hz
      8'h02   : cycle = CLK_FRE*1000000/293  ;  //low 2         293Hz
      8'h03   : cycle = CLK_FRE*1000000/329  ;  //low 3         329Hz
      8'h04   : cycle = CLK_FRE*1000000/349  ;  //low 4         349Hz
      8'h05   : cycle = CLK_FRE*1000000/392  ;  //low 5         392Hz
      8'h06   : cycle = CLK_FRE*1000000/440  ;  //low 6         440Hz
      8'h07   : cycle = CLK_FRE*1000000/499  ;  //low 7         499Hz
      8'h11   : cycle = CLK_FRE*1000000/523  ;  //middle 1      523Hz
      8'h12   : cycle = CLK_FRE*1000000/587  ;  //middle 2      587Hz
      8'h13   : cycle = CLK_FRE*1000000/659  ;  //middle 3      659Hz
      8'h14   : cycle = CLK_FRE*1000000/698  ;  //middle 4      698Hz
      8'h15   : cycle = CLK_FRE*1000000/784  ;  //middle 5      784Hz
      8'h16   : cycle = CLK_FRE*1000000/880  ;  //middle 6      880Hz
      8'h17   : cycle = CLK_FRE*1000000/998  ;  //middle 7      998Hz
      8'h21   : cycle = CLK_FRE*1000000/1046 ;  //high 1        1046Hz
      8'h22   : cycle = CLK_FRE*1000000/1174 ;  //high 2        1174Hz
      8'h23   : cycle = CLK_FRE*1000000/1318 ;  //high 3        1318Hz
      8'h24   : cycle = CLK_FRE*1000000/1396 ;  //high 4        1396Hz
      8'h25   : cycle = CLK_FRE*1000000/1568 ;  //high 5        1568Hz
      8'h26   : cycle = CLK_FRE*1000000/1760 ;  //high 6        1760Hz
      8'h27   : cycle = CLK_FRE*1000000/1976 ;  //high 7        1976Hz
      default : cycle = 20'd0 ;
    endcase
  end
endmodule

2.4、狀態(tài)機(jī)演奏模塊

? ? ? ? 狀態(tài)機(jī)設(shè)有四個(gè)狀態(tài),IDLE,PLAY,PLAY_WAIT和PLAY_END,其中PLAY狀態(tài)使用一個(gè)計(jì)數(shù)器對(duì)每個(gè)音符的演奏時(shí)長(zhǎng)進(jìn)行計(jì)數(shù),PLAY_WAIT用于檢查是否全部音符演奏完畢,如果否,則會(huì)對(duì)演奏時(shí)長(zhǎng)計(jì)數(shù)器清零并再次進(jìn)入PLAY狀態(tài)。

always @(*)begin
  case(state)
    IDLE:begin
      if (button_negedge)
        next_state = PLAY;
      else
        next_state = IDLE; 
    end
    PLAY:begin
      if (play_cnt == music_time)  
        next_state = PLAY_WAIT;
      else
        next_state = PLAY;
    end
    PLAY_WAIT:begin
      if (music_cnt == music_len - 1)
        next_state = PLAY_END;
      else
        next_state = PLAY;
    end
    PLAY_END:next_state = IDLE;
    default:next_state = IDLE;
  endcase
end

? ? ? ? 周期計(jì)數(shù)器用于對(duì)音符的每個(gè)周期進(jìn)行計(jì)數(shù),并提供計(jì)數(shù)值給輸出信號(hào)模塊。

always @(posedge clk or negedge rst_n)begin
  if (~rst_n)
    hz_cnt <= 20'd0;  
  else if (state == PLAY || state == PLAY_WAIT)begin
    if (hz_cnt == cycle - 1)
	    hz_cnt <= 20'd0;
	  else
      hz_cnt <= hz_cnt + 1'b1;
  end
  else 
    hz_cnt <= 20'd0;
end	

????????輸出信號(hào)模塊根據(jù)計(jì)數(shù)值輸出信號(hào),其中還可以控制占空比。

always @(posedge clk or negedge rst_n)begin
  if (~rst_n)
    buzzer <= 1'b1;  
  else if (state == PLAY || state == PLAY_WAIT)begin
    if (hz_cnt < cycle/32) //控制占空比
      buzzer <= 1'b0;
	else
	  buzzer <= 1'b1;
  end
  else if (state == IDLE || state == PLAY_END)
    buzzer <= 1'b1;
end

????????演奏時(shí)長(zhǎng)計(jì)數(shù)器用于對(duì)每個(gè)音符的演奏時(shí)間計(jì)數(shù)。

always @(posedge clk or negedge rst_n)begin
  if (~rst_n)
    play_cnt <= 32'd0;  
  else if (state == PLAY)
    play_cnt <= play_cnt + 1'b1;
  else 
    play_cnt <= 32'd0;
end

????????演奏個(gè)數(shù)計(jì)數(shù)器用于對(duì)演奏的音符數(shù)計(jì)數(shù)。

always @(posedge clk or negedge rst_n)begin
  if (~rst_n)
    music_cnt <= 32'd0;  
  else if (state == PLAY_WAIT)
    music_cnt <= music_cnt + 1'b1;
  else if (state == IDLE || state == PLAY_END)
    music_cnt <= 32'd0;
end

? ? ? ? 最后實(shí)例化ROM,并且注意,這里規(guī)定演奏時(shí)長(zhǎng)rom值以8為一拍,所以讀取rom值后需要進(jìn)行轉(zhuǎn)換,假設(shè)一分鐘85拍。文章來源地址http://www.zghlxwxcb.cn/news/detail-625747.html

music_hz hz0
(
 .hz_sel(rom_hz_data),
 .cycle(cycle) 
) ;

music_rom hz_rom
(
	.address(music_cnt[8:0]),
	.clock(clk),
	.q(rom_hz_data)
	);


music_time_rom time_rom
(
	.address(music_cnt[8:0]),
	.clock(clk),
	.q(rom_time_data)
	);
	
always @(posedge clk or negedge rst_n)begin
  if (~rst_n)
    music_time <= 32'hffff_ffff;  
  else
    music_time <= rom_time_data*(CLK_FRE*1000000*60/85/8);
end

到了這里,關(guān)于FPGA開發(fā):音樂播放器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • FPGA中Verilog的單首音樂播放器代碼,簡(jiǎn)潔易懂

    FPGA中Verilog的單首音樂播放器代碼,簡(jiǎn)潔易懂

    利用數(shù)控分頻器設(shè)計(jì)硬件樂曲演奏電路,利用蜂鳴器播放《我和我的祖國(guó)》 分頻器模塊: module div(iclk_50,rst,addr,clk_4); input iclk_50; input rst; output [8:0]addr; output clk_4; reg clk_4; reg [8:0]addr; reg [31:0]count_4; always@(posedge iclk_50 or negedge rst) begin ? ? if(!rst) ? ? ? ? begin ? ? ? ? ?clk_4=1\\\'b

    2024年02月08日
    瀏覽(19)
  • HarmonyOS開發(fā)案例:【音樂播放器】

    HarmonyOS開發(fā)案例:【音樂播放器】

    使用ArkTS語(yǔ)言實(shí)現(xiàn)了一個(gè)簡(jiǎn)易的音樂播放器應(yīng)用,主要包含以下功能: 播放應(yīng)用中的音頻資源文件,并可進(jìn)行上一曲、下一曲、播放、暫停、切換播放模式(順序播放、單曲循環(huán)、隨機(jī)播放)等操作。 結(jié)合后臺(tái)任務(wù)管理模塊,實(shí)現(xiàn)熄屏后繼續(xù)播放音頻。 相關(guān)概念 [AVPlayer]:

    2024年04月24日
    瀏覽(39)
  • Android開發(fā)之音樂播放器

    Android開發(fā)之音樂播放器

    我們大家平時(shí)長(zhǎng)時(shí)間打代碼的時(shí)候肯定會(huì)感到疲憊和乏味,這個(gè)時(shí)候一邊播放自己喜歡的音樂,一邊繼續(xù)打代碼,心情自然也愉快很多。音樂帶給人的聽覺享受是無(wú)可比擬的,動(dòng)聽的音樂可以愉悅?cè)说纳硇?,讓人更加積極地去熱愛生活。接下來就教大家如何用Android Studio自己

    2024年02月08日
    瀏覽(25)
  • 小項(xiàng)目開發(fā)——Android 音樂播放器

    小項(xiàng)目開發(fā)——Android 音樂播放器

    ? 音樂播放器 . ? 要求 : Activity 編程、 ListView 編程、 SeekBar 編程、 ExoPlayer 編程( 播放 、 暫停 、 停止 、 上一首 、 下一首 ),音樂文件放在 assets/music 目錄下,界面自擬. ? 期望最終效果: ? 分別對(duì)應(yīng) activity_music_list.xml 、 activity_my_music_player.xml 的視圖. ? 點(diǎn)擊列表任

    2024年01月21日
    瀏覽(27)
  • 嵌入式Qt 開發(fā)一個(gè)音樂播放器

    嵌入式Qt 開發(fā)一個(gè)音樂播放器

    上篇文章:RK3568源碼編譯與交叉編譯環(huán)境搭建,進(jìn)行了OK3568開發(fā)板軟件開發(fā)環(huán)境搭建,通過編譯RK3568的源碼,可以得到Qt開發(fā)的交叉編譯相關(guān)工具。 本篇,就來在搭建好的軟件開發(fā)中,進(jìn)行Qt軟件的開發(fā)測(cè)試。由于Qt是支持跨平臺(tái)的,因此本篇的音樂播放器,先在Windows上編寫

    2024年02月02日
    瀏覽(41)
  • Android手機(jī)開發(fā)課程設(shè)計(jì)之音樂播放器

    Android手機(jī)開發(fā)課程設(shè)計(jì)之音樂播放器

    一、音樂播放器概述與分析 目前手機(jī)的音樂播放功能已經(jīng)是大家比較關(guān)注的一個(gè)部分,不少在人在購(gòu)買手機(jī)的時(shí)候都會(huì)關(guān)心手機(jī)的音樂播放的能力,這也足以看出目前大家對(duì)音樂播放功能的重視,所以一款性能良好的手機(jī)音樂播放器軟件一定會(huì)受到歡迎。和傳統(tǒng)的音樂播放器

    2024年02月05日
    瀏覽(20)
  • 基于Arduino Uno開發(fā)板制作音樂播放器

    基于Arduino Uno開發(fā)板制作音樂播放器

    1.Arduino開發(fā)板 Arduino Uno 是一款基于 Microchip ATmega328P 微控制器的開源微控制器板,由 Arduino.cc 開發(fā),最初于 2010 年發(fā)布。該板配備了一組數(shù)字和模擬輸入/輸出 (I/O) 引腳,可以連接到各種擴(kuò)展板(屏蔽)和其他電路。 該板具有 14 個(gè)數(shù)字 I/O 引腳(6 個(gè)能夠進(jìn)行 PWM 輸出)、6 個(gè)

    2024年02月16日
    瀏覽(25)
  • IOS開發(fā)之——音樂播放器-資源和Model(02)

    音樂播放器資源文件 資源文件轉(zhuǎn)換為對(duì)應(yīng)的Model類 2.1 圖片資源 Images.xcassets(啟動(dòng)圖標(biāo)/播放按鈕/默認(rèn)背景等) 2.2 Resources(歌曲資源) Images(音樂大圖) Lrcs(音樂歌詞文件) MP3s(本地歌曲文件) Musics.plist(所有歌詞信息,轉(zhuǎn)換為HMMusic Model) 2.3 查看Copy Bundle Resources Targets——Build Phases——

    2023年04月12日
    瀏覽(19)
  • iOS開發(fā)Swift-4-IBAction,group,音樂播放器-木琴App

    iOS開發(fā)Swift-4-IBAction,group,音樂播放器-木琴App

    1.使用素材創(chuàng)建木琴App的UI。 ?2.連接IBAction。 ?其余按鈕直接拖拽到play里邊。 ?當(dāng)鼠標(biāo)置于1處時(shí)2處顯示如圖,表示成功。當(dāng)用戶按下任一按鈕都會(huì)觸發(fā)play中的內(nèi)容。 ?3.將7個(gè)按鈕的View中的Tag值分別調(diào)為1、2、3、4、5、6、7. ?4.將音頻文件拖入項(xiàng)目文件中。 ?Create groups時(shí),實(shí)

    2024年02月10日
    瀏覽(27)
  • 基于微信小程序的音樂播放器的設(shè)計(jì)與開發(fā)(源碼+lw+部署文檔+講解等)

    基于微信小程序的音樂播放器的設(shè)計(jì)與開發(fā)(源碼+lw+部署文檔+講解等)

    ?? 博主介紹 :?新人博主,工作經(jīng)驗(yàn)兩年+、專注于Java、小程序技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn)??? ??文末獲取源碼+數(shù)據(jù)庫(kù)?? 感興趣的可以先收藏起來,還有大家在畢設(shè)選題,項(xiàng)目以及論文編寫等相關(guān)問題都可以給我留言咨詢,希望幫助更多的人 隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,音

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包