資料介紹
描述
靈感
我對這個項目的最初想法是讓我的團隊在度過艱難的一天時可以使用一些有趣的東西,或者只是需要減輕心情。當我環顧辦公室時,我注意到了舊的 Magic 8ball。
我想我可以做類似的事情并大大擴展可能的答案數量。把它放在你可以提供你自己的答案和大量答案的地方。
我還注意到一個谷歌語音工具包,我幾乎是白手起家的。我還沒有用那個工具包做任何事情,這似乎是一個絕好的機會。
連接一切
連接一切都非常簡單。
- 確定街機按鈕上的 LED 和開關連接。
- 將一些跳線焊接到連接上。
- 將陰極(負)引線插入 LED 上,并將開關的一側插入擴展板中的接地(GND)引腳。
- 將開關的另一端插入擴展板上的 D2。
- 將 LED 上的陽極(正極)引線插入擴展板上的 D13。
- 將揚聲器線焊接到 1/8 音頻插頭上。使黑色成為外部(地面),紅色成為最中間的連接。應該無關緊要,因為此項目的所有音頻輸出都設置為單聲道。
- 按照有關組裝 Google 外殼的說明進行操作。
- 將 Spresense 安裝在外殼底部。我用了一些維可牢尼龍搭扣來防止它四處移動。
- 插入USB線
您現在應該準備好開始編寫草圖了
讓按鈕工作
定義按鈕及其 LED 將使用的引腳:
const int buttonPin = 2; // Pin used to detect a button press
const int ledPin = 13; // Pin for the highside of the button LED
設置一個變量來跟蹤按鈕的狀態:
// Variables used in interrupt service routines and other parts of the program should be volatile
// 2 is used to indicate there has not been an interrupt yet
// 1 is button released
// 0 is button pressed
volatile int buttonState = 2;
初始化引腳和中斷以處理按鈕狀態更改:
// setup the button and LED
pinMode(ledPin, OUTPUT); // will raise and lower this output to toggle the LED.
pinMode(buttonPin, INPUT); // will watch this pin to detect the button press.
// attaching and interrupt to the pin
attachInterrupt(buttonPin, pinIsr, CHANGE);
編寫中斷處理例程:
void pinIsr()
{
buttonState = digitalRead(buttonPin);
digitalWrite(ledPin, buttonState);
if (buttonState == 1)
canPlayQuip = true;
delayMicroseconds(200);
}
記錄俏皮話
我使用開源工具 Audacity 錄制了這個項目中的所有音頻。我這樣做有兩個原因:
- 這些是我自己的錄音,所以不會出現版權問題。
- 我喜歡使用 Audacity,一有機會就大聲疾呼
在錄音中要記住的是,當您保存它們時,它們需要采用以下格式:
- 恒定比特率
- 192kbps 比特率
- 幾秒長
應該有辦法不具備這些要求。我相信您應該能夠擁有大量的比特率。我嘗試了很多選項,但這些是唯一適用于 Spresense 播放器初始化設置的選項。
這是執行該初始化的行:
/*
* Set main player to decode stereo mp3. Stream sample rate is set to "auto detect"
* Search for MP3 decoder in "/mnt/sd0/BIN" directory
*/
err = theAudio->initPlayer(AudioClass::Player0, AS_CODECTYPE_MP3, "/mnt/sd0/BIN", AS_SAMPLINGRATE_AUTO, AS_CHANNEL_MONO);
我為采樣率或通道類型設置了什么似乎并不重要,除非使用上述比特率,否則 MP3 無法正確播放。
從 SD 卡讀取
設置一個變量來了解如何訪問 SD 卡:
SDClass theSD;
設置一個變量來保存文件信息:
File myDir;
打開SD卡根目錄》
Serial.println("Reading available quips from the SD card...");
myDir = theSD.open("/");
讀入文件并將它們放入一個數組中,以便稍后處理:
void getQuips(File dir, int numTabs)
{
String endTest = ".mp3";
while (true)
{
File entry = dir.openNextFile();
if (!entry || numQuips >= MAX_QUIPS)
{
// no more files
break;
}
String entryName = entry.name();
entryName.remove(0,1);
if (!entry.isDirectory() && entryName.endsWith(endTest) && !entryName.equals("init.mp3"))
{
foundQuips[numQuips] = entryName;
numQuips++;
}
entry.close();
}
}
關閉目錄:
myDir.close();
您一次只能打開一個文件。在這種情況下,與大多數文件系統一樣,目錄只是磁盤上的一個特殊文件。
讓聲音播放
設置一個變量來保存音頻實例:
AudioClass *theAudio;
設置音頻的基礎:
void setupAudio()
{
puts("checking audio initialization");
// make sure we are not calling this if there is nothing to call
if(audioInitialized)
{
puts("shutting down the audio subsystem");
theAudio->end();
sleep(1);
audioInitialized = false;
}
// start audio system
theAudio = AudioClass::getInstance();
theAudio->begin(audio_attention_cb);
puts("initialization Audio Library");
/* Set clock mode to normal */
theAudio->setRenderingClockMode(AS_CLKMODE_NORMAL);
puts("setting player mode");
/* Verify player initialize */
if (err != AUDIOLIB_ECODE_OK)
{
printf("Player0 initialize error\n");
exit(1);
}
/* Main volume set to -16.0 dB */
theAudio->setVolume(60);
audioInitialized = true;
}
找出要玩的俏皮話:
if (canPlayQuip)
{
playQuip(foundQuips[(int)random(numQuips)]);
currentQuip++;
Serial.print("currentQuip: ");
Serial.println(currentQuip);
}
設置播放器播放俏皮話并播放:
void playQuip(String fileName)
{
canPlayQuip = false;
Serial.print("Playing: ");
Serial.println(fileName);
/* Open file placed on SD card */
File myFile = theSD.open(fileName);
/* Verify file open */
if (!myFile)
{
printf("File open error\n");
exit(1);
}
printf("Open! %s\n", myFile.name());
theAudio->setPlayerMode(AS_SETPLAYER_OUTPUTDEVICE_SPHP, AS_SP_DRV_MODE_LINEOUT);
puts("player initialization");
/*
* Set main player to decode stereo mp3. Stream sample rate is set to "auto detect"
* Search for MP3 decoder in "/mnt/sd0/BIN" directory
*/
err = theAudio->initPlayer(AudioClass::Player0, AS_CODECTYPE_MP3, "/mnt/sd0/BIN", AS_SAMPLINGRATE_AUTO, AS_CHANNEL_MONO);
/* Send first frames to be decoded */
err = theAudio->writeFrames(AudioClass::Player0, myFile);
printf("Error: %d\n", err);
if ((err != AUDIOLIB_ECODE_OK) && (err != AUDIOLIB_ECODE_FILEEND))
{
printf("File Read Error! =%d\n",err);
myFile.close();
exit(1);
}
puts("Play!");
theAudio->startPlayer(AudioClass::Player0);
delay(100);
puts("Stop!");
sleep(1);
theAudio->stopPlayer(AudioClass::Player0);
puts("closing file");
myFile.close();
puts("returning to ready mode");
theAudio->setReadyMode();
}
確保在完成后關閉文件,因為您只能打開一個文件。此外,將播放器返回到“就緒模式”,以便再次播放。
進一步的想法
我認為這是一個非常整潔的董事會,有很多可能性。我有點驚訝,板上沒有內置無線連接。有附加板可以解決這個問題,本節中的其他項目已經展示了如何做到這一點。我確實希望有一種方法可以通過 Arduino IDE 使用多個內核。這是一次很棒的學習經歷。
我開始考慮可以使用與我對這個項目所做的類似的方法來完成的其他項目。以下是其中的一些想法:
基于位置的答案
把這個放在狗項圈里,這樣他們就可以和你說話了。
做一些鼓舞人心的俏皮話,讓它因團隊房間里的一些事件而消失,以激勵團隊走向偉大!
?
- Helping Finger開源硬件
- 顏色循環開源硬件
- Ada SensorTile開源硬件
- 開源硬件-警燈
- AirBits開源硬件
- 園藝助手開源硬件
- 閃爍的LED開源硬件
- 智能積木開源硬件
- 音箱開源硬件分享
- HBus開源硬件
- 門鈴開源硬件
- Arduino手表開源硬件
- 機械臂開源硬件
- 基于Arduino硬件光控燈制作資料 6次下載
- 主流的開源硬件有哪些詳細資料說明
- 安信可小安派-Knob旋轉編碼器驅動板簡介 481次閱讀
- 安派-Eyes-DU開發板的參數說明 534次閱讀
- 用小安派開源硬件制作一個桌面天氣站 809次閱讀
- 影響膠球清洗裝置收球率的各種因素 964次閱讀
- 使用開源硬件的烹飪過程 1313次閱讀
- 尋找開源硬件成功的觸發器 636次閱讀
- 如何自制一個魔術燈 3503次閱讀
- dfrobotDFRobot Bluno M3控制器簡介 1823次閱讀
- 源創通信BPI-M1+ 開源硬件開發板介紹 2648次閱讀
- 源創通信開源智能路由器 MTK 7623N 介紹 2897次閱讀
- 浮球液位計的工作原理_浮球液位計的特點 1.2w次閱讀
- 關于FPGA在開源方面的探索淺析 3706次閱讀
- 基于Altium Designer的OSHw開源項目 3609次閱讀
- 三大主流開源硬件對比:Arduino vs BeagleBone vs Raspberry Pi 6363次閱讀
- 開源硬件究竟有多“Open”?看完這個你就清楚了 6939次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多