前幾天入手了這個相機模組(LinkSprite JPEG Color Camera Serial UART Interface )
這個相機模組價格算是很高,但是由於使用Serial Communication,並且是直接傳輸給你JPEG邊碼後的格式,基本上使用起來十分容易,並且能給一些低速的晶片(如大家最常用的Arduino來使用,不一定需要ARM之類的晶片),只需要了解此相機的相關協議,基本上就能使用,在此附上datasheet給各位讀者參考。
LinkSprite JPEG Color Camera Serial UART Interface
此款相機模組和小弟上次購買的ov7670相機模組還差蠻多的,ov7670使用標準的SCCB介面,相容I2C介面,主要是ARM 系統在用的比較多,或是要搭配 tft LCD 做顯示,若要搭配Arduino使用可能會不太合適,所以在此就先不討論。
由於手邊的Arduino只有主板,並沒有搭配sd卡模組之類的,就算接了LinkSprite JPEG Color Camera Serial UART Interface也沒辦反儲存本次的拍攝,所以這次直接使用相機模組+USB to UART晶片連接電腦,使用VC++來實作,連接方法如下圖(看不清楚請另存圖片):
對於VC不熟的,或是對於.NET的SerialPort物件不熟的,也沒關係,主要命令拍攝的程式碼:
若您是使用Arduino,則自行把SerialWriteChar()和serialport->readChar()或serialport->readByte(),修改為SoftwareSerial.write()以及SoftwareSerial.read()就可以,比較麻煩的是
fopen()、fwrite()、fclose()等等,由於本人沒研究Arduino的sd卡操作,所以此部分要自行改寫。
最後附上完整的VC專案檔案
點我下載(Google雲端)
2014年11月18日 星期二
2014年9月14日 星期日
C# 跨執行緒作業無效: 存取控制項時所使用的執行緒與建立控制項的執行緒不同
最近寫程式時遇到一個問題,如題,但造成的原因是什麼呢?
以下是我寫的遇到問題的程式的程式碼片段Form1.cs的內容
完整的遇到問題之專案請到這裡下載
這隻程式主要是透過按下按鈕,然後把label的值改成Hello,並在三秒後把值改成World,但是在這裡並不是由Form1對label的值進行修改,而是由Form1的成員Controller來對label的值進行修改,並且啟動Controller中的Timer來計時,並觸發二度改寫文字的事件,成員Controller的類別是屬於寫在同一個Namespace WindowsFormsApplication1的類別MyLabelController,至於為何我要這樣用? 只是單純想測試可不可以寫一個控制用成員,負責管理其他UI類的成員,只需要操控此控制用成員,此控制用成員能幫你去管理你的所有UI類成員,也就是當有數百個label類的UI成員的時候,成員Controller能夠依照你對它的操控,幫你去管理其他的label類的UI成員。
程式執行畫面大概像這樣:
而按下按鈕,之後會順利的顯示Hello,但是過了三秒後再跳出World的時候,就發生錯誤了
以上就是遇到的問題,或許大家會覺得我這種寫法脫褲子放屁,遇到問題活該,不過由於我剛學C#沒有很久,之前都是學Gnu的C與C++,所以目前還是在學習階段,所以我當遇到問題是學習,既然都遇到問題了,那至少要先把這個問題解決,再以別的方法實踐相同功能,作為C#的學習。
於是後來查了資料,此種問題,是因為我在class MyLabelController中宣告的Timers事件,實際上已經與Form1始於不同的執行續, 但是在Form1呼叫Controller的方法HelloWorld時,是以Form1的執行續互叫來執行的,所以顯示Hello時沒遇到錯誤,直到Controller的Timers事件Elapsed時,此時由於是由MyLabelController的事件處理觸發的事件,故執行續與Form1的執行續不相同,而為了安全起見,兩個不同執行續A、B,A無法控制位於B中的UI物件(控制項),B也無法無法控制位於A中的UI物件(控制項),所以發生了System.InvalidOperationException,造成錯誤。至於要如何修改呢? 在這裡我們必須用到委派(dalegate)的方式來處理
委派如同字面意思,在這裡就是讓Controller委託 Form1去做label1_World()這件事情,由於 Form1本身就是label1UI物件(控制項)得擁有者,由Controller委託 Form1來做,自然就不會遇到A無法控制位於B中的UI物件(控制項)的問題,至於要怎麼改呢? 程式碼如下:
public delegate void mydalegate(); 由於我們要委託的對象方法為
public void label1_World(); 是屬於void,並且沒有參數傳入,所以這裡要把 mydalegate 定義成這樣:public delegate void mydalegate();。
接下來,建立委派
public mydalegate md; 並且在Form1的建構子,明確指定此委派的對象為方法為 label1_World;
改寫後的程式碼,請點這裡下載
以下是我寫的遇到問題的程式的程式碼片段Form1.cs的內容
完整的遇到問題之專案請到這裡下載
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
MyLabelController Controller = new MyLabelController();
public Form1()
{
InitializeComponent();
}
public void label1_Hello()
{
label1.Text = "Hello";
}
public void label1_World()
{
label1.Text = "World";
}
private void button1_Click(object sender, EventArgs e)
{
Controller.HelloWorld(this);
}
}
public class MyLabelController
{
Form1 Parent;
public void HelloWorld(Form1 target)
{
Parent=target;
Parent.label1_Hello();
System.Timers.Timer t = new System.Timers.Timer(3000);
t.Elapsed += this.Next;
t.Enabled = true;
}
private void Next(Object obj, ElapsedEventArgs e)
{
Parent.label1_World();
}
}
}
這隻程式主要是透過按下按鈕,然後把label的值改成Hello,並在三秒後把值改成World,但是在這裡並不是由Form1對label的值進行修改,而是由Form1的成員Controller來對label的值進行修改,並且啟動Controller中的Timer來計時,並觸發二度改寫文字的事件,成員Controller的類別是屬於寫在同一個Namespace WindowsFormsApplication1的類別MyLabelController,至於為何我要這樣用? 只是單純想測試可不可以寫一個控制用成員,負責管理其他UI類的成員,只需要操控此控制用成員,此控制用成員能幫你去管理你的所有UI類成員,也就是當有數百個label類的UI成員的時候,成員Controller能夠依照你對它的操控,幫你去管理其他的label類的UI成員。
程式執行畫面大概像這樣:
而按下按鈕,之後會順利的顯示Hello,但是過了三秒後再跳出World的時候,就發生錯誤了
以上就是遇到的問題,或許大家會覺得我這種寫法脫褲子放屁,遇到問題活該,不過由於我剛學C#沒有很久,之前都是學Gnu的C與C++,所以目前還是在學習階段,所以我當遇到問題是學習,既然都遇到問題了,那至少要先把這個問題解決,再以別的方法實踐相同功能,作為C#的學習。
於是後來查了資料,此種問題,是因為我在class MyLabelController中宣告的Timers事件,實際上已經與Form1始於不同的執行續, 但是在Form1呼叫Controller的方法HelloWorld時,是以Form1的執行續互叫來執行的,所以顯示Hello時沒遇到錯誤,直到Controller的Timers事件Elapsed時,此時由於是由MyLabelController的事件處理觸發的事件,故執行續與Form1的執行續不相同,而為了安全起見,兩個不同執行續A、B,A無法控制位於B中的UI物件(控制項),B也無法無法控制位於A中的UI物件(控制項),所以發生了System.InvalidOperationException,造成錯誤。至於要如何修改呢? 在這裡我們必須用到委派(dalegate)的方式來處理
委派如同字面意思,在這裡就是讓Controller委託 Form1去做label1_World()這件事情,由於 Form1本身就是label1UI物件(控制項)得擁有者,由Controller委託 Form1來做,自然就不會遇到A無法控制位於B中的UI物件(控制項)的問題,至於要怎麼改呢? 程式碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
MyLabelController Controller = new MyLabelController();
public delegate void mydalegate();
public mydalegate md;
public Form1()
{
InitializeComponent();
md = new mydalegate(label1_World);
}
public void label1_Hello()
{
label1.Text = "Hello";
}
public void label1_World()
{
label1.Text = "World";
}
private void button1_Click(object sender, EventArgs e)
{
Controller.HelloWorld(this);
}
}
public class MyLabelController
{
Form1 Parent;
public void HelloWorld(Form1 target)
{
Parent=target;
Parent.label1_Hello();
System.Timers.Timer t = new System.Timers.Timer(3000);
t.Elapsed += this.Next;
t.Enabled = true;
}
private void Next(Object obj, ElapsedEventArgs e)
{
//Parent.label1_World();
Parent.Invoke(Parent.md);
}
}
}
解釋一下下列的程式碼:public delegate void mydalegate(); 由於我們要委託的對象方法為
public void label1_World(); 是屬於void,並且沒有參數傳入,所以這裡要把 mydalegate 定義成這樣:public delegate void mydalegate();。
接下來,建立委派
public mydalegate md; 並且在Form1的建構子,明確指定此委派的對象為方法為 label1_World;
public Form1()
{
InitializeComponent();
md = new mydalegate(label1_World);
}
最後,只要把Next中的程式,修改為
private void Next(Object obj, ElapsedEventArgs e)
{
//Parent.label1_World();
Parent.Invoke(Parent.md); //委派Form1去執行md這個委派
}
就能順利執行了,以下為程式執行結果改寫後的程式碼,請點這裡下載
2014年3月16日 星期日
作業系統(恐龍本) 第一章整理(1)
整理1.1~1.3
-------------------------------------------------------------------------------------
1 Introduction
01.作業系統的目標(Operating system goals):
-執行使用者的程式、解決使用者的問題
-讓電腦系統方便的被使用
-有效率的管理電腦硬體
-------------------------------------------------------------------------------------
1.1 What Operating Systems Do
02.電腦系統可被分為四個構成要素(Computer system can be divided into four components):
-硬體
-作業系統
-應用程式
-使用者(包含人、機器或其他電腦)
-------------------------------------------------------------------------------------
1.1.1 User View
1.1.2 System View
03.作業系統做什麼(What Operating Systems Do)
-Depends on the point of view
+User View
-Users want convenience, ease of use,Don’t care about resource utilization
-Handheld computers are resource poor, optimized for usability and
battery life
-......
+System View
-作業系統是一個資源分配者(OS is a resource allocator)
+管理所有的資源
+當需求互相衝突時,決定資源要配給何者
-作業系統是一個控制程式(OS is a control program)
+管理使用者程式的執行,避免錯誤與不合適(errors and improper)的使用電腦
-------------------------------------------------------------------------------------
1.1.3 Defining Operating Systems
04.定義作業系統(Operating System Definition)
-In general, we have no completely adequate definition of an operating system.
+In addition,wehave no universally accepted definition of what is part of
the operating system.
+operating system is the one program running at all times on the computer
called the kernel
-------------------------------------------------------------------------------------
1.2 Computer-System Organization
-------------------------------------------------------------------------------------
1.2.1 Computer-System Operation
05.電腦啟動
-電腦啟動時bootstrap program會被載入到記憶體中
-bootstrap program通常放在ROM或EPROM,作為韌體(firmware)存在
-初始化系統的各個層面
+初始化CPU的暫存器(CPU registers)
+初始化裝置控制器(device controllers)
+初始化記憶體的內容(memory contents)
-載入並執行作業系統的核心(kernel)
06.中斷(interrupt) (p8)
-軟體發出中斷
+executing a special operation called a system call
-硬體發出中斷
+sending a signal to the CPU, usually by way of the system bus
-中斷向量(interruptvector)
-------------------------------------------------------------------------------------
1.2.2 Storage Structure
07.Memory的種類
-DRAM(dynamic random-access memory)
-ROM(read-only memory)
+因為ROM不能被修改,只有static的程式,像是開機程式被存在那
-EEPROM(electrically erasable programmable read-only memory)
+EEPROM無法被頻繁的修改,通常放著不易改變的程式,以智慧型手機來說,
EEPROM存著原廠安裝的程式
08.Storage-device hierarchy
-根據速度價錢以及volatile/nonvolatile,可由高到低排成這樣的層級
+Register
+Cache
+Main memory(DRAM)
+SSD(solid-state disk)
+Magnetic disk
+Optical disk
+Magnitic tapes
-
09.volatile storage 與 nonvolatile storage
-volatile storage 在停止供電後,會失去所有儲存的資料
-nonvolatile storage 在停止供電後,不會失去儲存的資料
10.其他特殊設備
-NVRAM(nonvolatile random-access memory)
+透過DRAM+電池,擁有DRAM的速度,並能在斷電後保有資料(看電池能用多久)
-------------------------------------------------------------------------------------
1.2.3 I/O Structure
11.device controller 與 device driver (p12)
-每個device driver都是特定用於某個device controller上的
-device controller位於硬體上,擁有自己的Buffer與Register
-device driver會去適當的讀取device controller的Register,判斷要做甚麼
(such as “read a character from the keyboard”
-作業系統針對不同的device controller擁有不同的device driver
12.DMA(direct memory access)
-device controller不透CPU,直接把自己整個Block的Buffer傳輸到Main memory的某部分,
每傳完一個Block丟出一個interupt,通知device driver操作已經完成
-------------------------------------------------------------------------------------
1.3 Computer-System Architecture
-------------------------------------------------------------------------------------
1.3.1 Single-Processor Systems
13.Single-Processor Systems
-僅具有一個用來處理Instruction set的主CPU
-幾乎所有的Single-Processor Systems架構仍具有其他.special-purpose processors,
不過並不會因為有這些special-purpose processors,讓架構變成Multiprocessor systems
14.special-purpose processors
-They may come in the form of device-specific processors
+disk controllers
-a disk-controller microprocessor receives a sequence of requests
fromthe main CPU and implements its own disk queue and scheduling algorithm
+keyboard controllers
+graphics controllers
-------------------------------------------------------------------------------------
1.3.2 Multiprocessor Systems
15.Multiprocessor systems have three main advantages (p14)
-提高吞吐量(Increased throughput)
-更經濟(Economy of scale)
-增加可靠性(Increased reliability)
16.The multiple-processor systems in use today are of two types.
-不對稱多處理(Asymmetric multiprocessing)
+A boss–worker relationship. The boss processor schedules
and allocates work to the worker processors.
-對稱多處理(Symmetric multiprocessing , SMP)
+Each processor performs all tasks within the operating system
-------------------------------------------------------------------------------------
1 Introduction
01.作業系統的目標(Operating system goals):
-執行使用者的程式、解決使用者的問題
-讓電腦系統方便的被使用
-有效率的管理電腦硬體
-------------------------------------------------------------------------------------
1.1 What Operating Systems Do
02.電腦系統可被分為四個構成要素(Computer system can be divided into four components):
-硬體
-作業系統
-應用程式
-使用者(包含人、機器或其他電腦)
-------------------------------------------------------------------------------------
1.1.1 User View
1.1.2 System View
03.作業系統做什麼(What Operating Systems Do)
-Depends on the point of view
+User View
-Users want convenience, ease of use,Don’t care about resource utilization
-Handheld computers are resource poor, optimized for usability and
battery life
-......
+System View
-作業系統是一個資源分配者(OS is a resource allocator)
+管理所有的資源
+當需求互相衝突時,決定資源要配給何者
-作業系統是一個控制程式(OS is a control program)
+管理使用者程式的執行,避免錯誤與不合適(errors and improper)的使用電腦
-------------------------------------------------------------------------------------
1.1.3 Defining Operating Systems
04.定義作業系統(Operating System Definition)
-In general, we have no completely adequate definition of an operating system.
+In addition,wehave no universally accepted definition of what is part of
the operating system.
+operating system is the one program running at all times on the computer
called the kernel
-------------------------------------------------------------------------------------
1.2 Computer-System Organization
-------------------------------------------------------------------------------------
1.2.1 Computer-System Operation
05.電腦啟動
-電腦啟動時bootstrap program會被載入到記憶體中
-bootstrap program通常放在ROM或EPROM,作為韌體(firmware)存在
-初始化系統的各個層面
+初始化CPU的暫存器(CPU registers)
+初始化裝置控制器(device controllers)
+初始化記憶體的內容(memory contents)
-載入並執行作業系統的核心(kernel)
06.中斷(interrupt) (p8)
-軟體發出中斷
+executing a special operation called a system call
-硬體發出中斷
+sending a signal to the CPU, usually by way of the system bus
-中斷向量(interruptvector)
-------------------------------------------------------------------------------------
1.2.2 Storage Structure
07.Memory的種類
-DRAM(dynamic random-access memory)
-ROM(read-only memory)
+因為ROM不能被修改,只有static的程式,像是開機程式被存在那
-EEPROM(electrically erasable programmable read-only memory)
+EEPROM無法被頻繁的修改,通常放著不易改變的程式,以智慧型手機來說,
EEPROM存著原廠安裝的程式
08.Storage-device hierarchy
-根據速度價錢以及volatile/nonvolatile,可由高到低排成這樣的層級
+Register
+Cache
+Main memory(DRAM)
+SSD(solid-state disk)
+Magnetic disk
+Optical disk
+Magnitic tapes
-
09.volatile storage 與 nonvolatile storage
-volatile storage 在停止供電後,會失去所有儲存的資料
-nonvolatile storage 在停止供電後,不會失去儲存的資料
10.其他特殊設備
-NVRAM(nonvolatile random-access memory)
+透過DRAM+電池,擁有DRAM的速度,並能在斷電後保有資料(看電池能用多久)
-------------------------------------------------------------------------------------
1.2.3 I/O Structure
11.device controller 與 device driver (p12)
-每個device driver都是特定用於某個device controller上的
-device controller位於硬體上,擁有自己的Buffer與Register
-device driver會去適當的讀取device controller的Register,判斷要做甚麼
(such as “read a character from the keyboard”
-作業系統針對不同的device controller擁有不同的device driver
12.DMA(direct memory access)
-device controller不透CPU,直接把自己整個Block的Buffer傳輸到Main memory的某部分,
每傳完一個Block丟出一個interupt,通知device driver操作已經完成
-------------------------------------------------------------------------------------
1.3 Computer-System Architecture
-------------------------------------------------------------------------------------
1.3.1 Single-Processor Systems
13.Single-Processor Systems
-僅具有一個用來處理Instruction set的主CPU
-幾乎所有的Single-Processor Systems架構仍具有其他.special-purpose processors,
不過並不會因為有這些special-purpose processors,讓架構變成Multiprocessor systems
14.special-purpose processors
-They may come in the form of device-specific processors
+disk controllers
-a disk-controller microprocessor receives a sequence of requests
fromthe main CPU and implements its own disk queue and scheduling algorithm
+keyboard controllers
+graphics controllers
-------------------------------------------------------------------------------------
1.3.2 Multiprocessor Systems
15.Multiprocessor systems have three main advantages (p14)
-提高吞吐量(Increased throughput)
-更經濟(Economy of scale)
-增加可靠性(Increased reliability)
16.The multiple-processor systems in use today are of two types.
-不對稱多處理(Asymmetric multiprocessing)
+A boss–worker relationship. The boss processor schedules
and allocates work to the worker processors.
-對稱多處理(Symmetric multiprocessing , SMP)
+Each processor performs all tasks within the operating system
2014年3月15日 星期六
Beaglebone Black 使用USB音效卡(1)
由於想要把Beaglebone Black變成音樂撥放器,所以去研究了使用ALSA來進行LINUX的音訊處理,其中有遇到一些大大小小的問題,所以寫了此篇文章來分享,若小弟有哪裡做的不太對,歡迎大大留言指導,謝謝!
接著,把BBB重開機,並使用ssh連上它。
確認音效卡有被偵測到,我們切換到proc/asound的資料夾去檢查
若您連這個資料夾都沒有,可能代表您的kernel是不支援ALSA的。
使用ls觀察檔案結構,在這裡可看到,Black 與 card1 分別為兩個設備,
一個是BBB的HDMI音源輸出 (HDMI是有音源輸出的 ),另一個則是我們的USB音效卡,
若您沒有出現card1,可能是您的音效卡晶片是不被kernel支援的。
我們可透過cat pcm來顯示這些音訊設備的資訊
識別 裝置名稱 播放PCM 錄音PCM
00-00: HDMI nxp-hdmi-hifi-0 : : playback 1
01-00: USB Audio : USB Audio : playback 1 : capture 1
HDMI nxp-hdmi-hifi-0這個就是BBB的HDMI音源輸出,我們可以看到,他僅有playback,
並沒有 capture ,而 USB Audio : USB Audio就是我們的USB音效卡。
確認我們的音效卡都OK後,可幫音效卡接上耳機,準備測試撥放音樂。
隨便把一個wav檔案抓到BBB中 (看你要透過網路還是甚麼方式,反正弄個wav就是了)
*可不要拿mp3檔案喔,因為mp3是編碼過後的,是不能這樣直接撥的。
銀魂主題曲,我還滿喜歡的XD
我們目前先不自己寫程式去撥放音樂,先用現成的ALSA工具來做,
到時候我會再繼續延伸下去。
使用apt-get install alsa-utils來安裝Alsa-utils工具,接著測試這幾個指令是否能用
aplay ALSA的音樂播放工具 簡易用法指令 aplay <filename>
alsamixer ALSA的音效卡設定工具 簡易用法指令 alsamixer
到這裡你或許會很開心的,直接下aplay Pray.wav來撥放音樂。
程式會停在這不動,代表正在撥放,不過~~~~你會甚麼都聽不到!!!
為甚麼呢? 因為預設的音效卡是HDMI音源輸出喔~你的耳機總不會接在那上面吧!!
那該怎麼辦呢? 我們要對aplay下參數,讓他使用USB音效卡來撥放!
左邊的是音源輸出音量~~建議調到個位數喔...很大聲的 QQ
調整完按ESC關閉。
最後 下指令 aplay -D hw:1,0 Pray.wav 聽音樂了 !!
-----------------------------------------------------------------------------------------
正文結束
終於介紹完了 ((累
若過程中有遇到甚麼問題,歡迎提出來大家一起討論喔 ^^
在閱讀之前,您可能需要有下列的裝置:
1.安裝Ubuntu的Beaglebone Black (kernel版本別太舊)
要能上網 ,並且有電源供應器 (其實不一定,要看情況)
2.一張支援Linux的USB音效卡
在閱讀之前,您可能需要會下列的東西:
1.透過ssh指令連線進入beaglebone black (LINUX)
或是 透過putty連線進入beaglebone black (WINDOWS)
2.基本的Linux操縱
3.懂得使用Ubuntu的apt-get指令
正文
正文
-----------------------------------------------------------------------------------------
USB音效卡直接接到BBB的USB埠中,連接網路線、電源線、USB線,
我使用的USB音效卡是露天拍賣買的,$50一個 ( 比運費還便宜阿 = _= )
" USB Audio 音效卡 Windows8 32bit/64bit & Linux 免驅動光碟 "
而網路是使用具有DHCP功能的router,插著就能上網,電源是使用
5V2A的變壓器供電。
USB音效卡直接接到BBB的USB埠中,連接網路線、電源線、USB線,
我使用的USB音效卡是露天拍賣買的,$50一個 ( 比運費還便宜阿 = _= )
" USB Audio 音效卡 Windows8 32bit/64bit & Linux 免驅動光碟 "
而網路是使用具有DHCP功能的router,插著就能上網,電源是使用
5V2A的變壓器供電。
確認音效卡有被偵測到,我們切換到proc/asound的資料夾去檢查
若您連這個資料夾都沒有,可能代表您的kernel是不支援ALSA的。
使用ls觀察檔案結構,在這裡可看到,Black 與 card1 分別為兩個設備,
一個是BBB的HDMI音源輸出 (HDMI是有音源輸出的 ),另一個則是我們的USB音效卡,
若您沒有出現card1,可能是您的音效卡晶片是不被kernel支援的。
我們可透過cat pcm來顯示這些音訊設備的資訊
識別 裝置名稱 播放PCM 錄音PCM
00-00: HDMI nxp-hdmi-hifi-0 : : playback 1
01-00: USB Audio : USB Audio : playback 1 : capture 1
HDMI nxp-hdmi-hifi-0這個就是BBB的HDMI音源輸出,我們可以看到,他僅有playback,
並沒有 capture ,而 USB Audio : USB Audio就是我們的USB音效卡。
確認我們的音效卡都OK後,可幫音效卡接上耳機,準備測試撥放音樂。
隨便把一個wav檔案抓到BBB中 (看你要透過網路還是甚麼方式,反正弄個wav就是了)
*可不要拿mp3檔案喔,因為mp3是編碼過後的,是不能這樣直接撥的。
銀魂主題曲,我還滿喜歡的XD
我們目前先不自己寫程式去撥放音樂,先用現成的ALSA工具來做,
到時候我會再繼續延伸下去。
使用apt-get install alsa-utils來安裝Alsa-utils工具,接著測試這幾個指令是否能用
aplay ALSA的音樂播放工具 簡易用法指令 aplay <filename>
alsamixer ALSA的音效卡設定工具 簡易用法指令 alsamixer
到這裡你或許會很開心的,直接下aplay Pray.wav來撥放音樂。
為甚麼呢? 因為預設的音效卡是HDMI音源輸出喔~你的耳機總不會接在那上面吧!!
那該怎麼辦呢? 我們要對aplay下參數,讓他使用USB音效卡來撥放!
識別 裝置名稱 播放PCM 錄音PCM
00-00: HDMI nxp-hdmi-hifi-0 : : playback 1
01-00: USB Audio : USB Audio : playback 1 : capture 1
指令 aplay -D hw:1,0 Pray.wav , -D參數為選擇裝置,這裡我們使用 hw:1,0 是代表
01-00: USB Audio : USB Audio : playback 1 : capture 1 這個裝置 ( "01-00:" --> hw:1,0 )
不過~~希望您還沒把他撥放下去,因為......預設的音量絕對會穰您的耳朵感到不舒服....
我們能使用 alsamixer 指令進入設定畫面 :
輸入指令,alsamixer後應該會看到這畫面 (高級ㄟ~~居然不是純文字XD)
接著按下 F6 , 選擇我們的USB音效卡00-00: HDMI nxp-hdmi-hifi-0 : : playback 1
01-00: USB Audio : USB Audio : playback 1 : capture 1
指令 aplay -D hw:1,0 Pray.wav , -D參數為選擇裝置,這裡我們使用 hw:1,0 是代表
01-00: USB Audio : USB Audio : playback 1 : capture 1 這個裝置 ( "01-00:" --> hw:1,0 )
不過~~希望您還沒把他撥放下去,因為......預設的音量絕對會穰您的耳朵感到不舒服....
我們能使用 alsamixer 指令進入設定畫面 :
輸入指令,alsamixer後應該會看到這畫面 (高級ㄟ~~居然不是純文字XD)
左邊的是音源輸出音量~~建議調到個位數喔...很大聲的 QQ
最後 下指令 aplay -D hw:1,0 Pray.wav 聽音樂了 !!
-----------------------------------------------------------------------------------------
正文結束
終於介紹完了 ((累
若過程中有遇到甚麼問題,歡迎提出來大家一起討論喔 ^^
訂閱:
文章 (Atom)