资料介绍
描述
灵感
我对这个项目的最初想法是让我的团队在度过艰难的一天时可以使用一些有趣的东西,或者只是需要减轻心情。当我环顾办公室时,我注意到了旧的 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次下载 | 免费
评论
查看更多