音楽再生, USB, リアルタイムOS, 製作, Stack, Queue
その他
TerminalPro4用のソフトウェアの作り方を説明します.
- ソフト作製の流れ
- TerminalPro4での制御流れ
- ソフトの作り方
TerminalPro4のハードウェアを作っていきます. 次のことを説明していきます.
- 各モジュールの用意
- モジュール間の接続
Cloud Music Boxは、クラウドストレージ(現在はOneDriveのみ)から音楽を再生するPWA音楽プレイヤーです。
以下の特徴を持ちます。
- PWAとして、多くのプラットフォーム(Windows, macOS, iOS, Android)上で同様のユーザ体験を実現します。
- 一元管理されたクラウドストレージからの再生で、プレイヤーごとに音楽を同期する必要がありません。
- オフラインでも、ダウンロード済みの音楽は再生可能です。
- アプリがバックグラウンドにある場合でも、音楽の連続再生が可能です(iOSのみ動作しないことがある)。
- 音楽に合わせて、動的にアプリのスタイルやアニメーションが変化します。
Cloud Music Boxは、クラウドストレージ(現在はOneDriveのみ)から音楽を再生するPWA音楽プレイヤーです。
以下の特徴を持ちます。
- PWAとして、多くのプラットフォーム(Windows, macOS, iOS, Android)上で同様のユーザ体験を実現します。
- 一元管理されたクラウドストレージからの再生で、プレイヤーごとに音楽を同期する必要がありません。
- オフラインでも、ダウンロード済みの音楽は再生可能です。
- アプリがバックグラウンドにある場合でも、音楽の連続再生が可能です(iOSのみ動作しないことがある)。
- 音楽に合わせて、動的にアプリのスタイルやアニメーションが変化します。
私が製作に携わったゲームを紹介します.
Cloud Music Boxは、クラウドストレージ(現在はOneDriveのみ)から音楽を再生するPWA音楽プレイヤーです。
以下の特徴を持ちます。
- PWAとして、多くのプラットフォーム(Windows, macOS, iOS, Android)上で同様のユーザ体験を実現します。
- 一元管理されたクラウドストレージからの再生で、プレイヤーごとに音楽を同期する必要がありません。
- オフラインでも、ダウンロード済みの音楽は再生可能です。
- アプリがバックグラウンドにある場合でも、音楽の連続再生が可能です(iOSのみ動作しないことがある)。
- 音楽に合わせて、動的にアプリのスタイルやアニメーションが変化します。
Arduinoで電子工作をしていると音を鳴らしたくなります. その鳴る音は電子音のようなピーピー音ではなく, ゲーム機でなっているような音―むしろ音楽といった方がいいでしょう―にしたいです.
このページではArduinoを用いて音楽を鳴らすことができる’MediaPalyer’を紹介します. 外部シールドを使わないで音楽を鳴らすことができます.
ただし以下の環境が必要です.
メインのArduino
下の音楽再生用のArduinoをコントロールするためのものです.
音楽を再生するためのArduino
MediaPlayerは音楽を再生するためのArduinoを必要とします. これはつまり音楽を再生する処理とそのほかのメイン処理を分けるということになります. こうすることで, Arduinoは音楽を再生するための処理に集中することができます.
対応しているArduinoについて
- 動作周波数: 8MHz, 16MHz
microSD
音楽ファイルを保存するために必要です
音楽ファイル
- 対応ファイル形式: Wave
- サンプリング周波数: 32KHz, 16KHz, 8KHz
- 量子化精度: 8bit
Arduinoで電子工作をしていると音を鳴らしたくなります. その鳴る音は電子音のようなピーピー音ではなく, ゲーム機でなっているような音―むしろ音楽といった方がいいでしょう―にしたいです.
このページではArduinoを用いて音楽を鳴らすことができる’MediaPalyer’を紹介します. 外部シールドを使わないで音楽を鳴らすことができます.
ただし以下の環境が必要です.
メインのArduino
下の音楽再生用のArduinoをコントロールするためのものです.
音楽を再生するためのArduino
MediaPlayerは音楽を再生するためのArduinoを必要とします. これはつまり音楽を再生する処理とそのほかのメイン処理を分けるということになります. こうすることで, Arduinoは音楽を再生するための処理に集中することができます.
対応しているArduinoについて
- 動作周波数: 8MHz, 16MHz
microSD
音楽ファイルを保存するために必要です
音楽ファイル
- 対応ファイル形式: Wave
- サンプリング周波数: 32KHz, 16KHz, 8KHz
- 量子化精度: 8bit
Arduinoで何か作品を作っているとき, その作品に音を鳴らせたい時があります. 本格的に音楽を鳴らすのではなく, 効果音としてちょこっと入れたいという意味です. 例えば, 簡単な早押しゲームを作るとして, ボタンを押したときの効果音を入れたいという時です. ですが, この効果音を入れたいために別のArduinoを用意するのはコストの点で好ましくありません. -オーディオプレイヤーのように音楽を鳴らしたい時は[Arduino/Arduinoで音楽を鳴らす]を参照してください.-
ここで, このMelodyPlayerがあります. このMelodyPlayerは新たにArduinoを用意する必要はありません. また, 音楽再生処理はバックグラウンドで行っているためメインプログラムに何も影響を与えません. メロディーを流しながら何か他の処理―LED点灯, ボタン入力など―をすることができます. あなたがすでに書いたスケッチのコードに一行"Play(’Melody名’)"と入れるだけでメロディーが再生されます.
MelodyPlayerができるのは以下の通りです.
- インクルードするだけで簡単にメロディー再生
- 簡単にメロディーを追加
ただしMelodyPlayerはピン3,9,10,11のPWM出力を妨げます.
サイズ固定のスタックを扱うライブラリを紹介します.
このStackは, 以下の特徴を持ちます.
- std::stack が使用できない状況下でのスタックの使用
- メモリを贅沢に使用しないサイズ固定スタック
- 例外処理に対応していない環境下での使用
サイズ固定の待ち行列ライブラリを紹介します.
このQueueは, 以下の特徴を持ちます.
- std::queue が使用できない状況下での待ち行列の使用
- メモリを贅沢に使用しないサイズ固定待ち行列
- 例外処理に対応していない環境下での使用
Arduinoで電子工作をしていると音を鳴らしたくなります. その鳴る音は電子音のようなピーピー音ではなく, ゲーム機でなっているような音―むしろ音楽といった方がいいでしょう―にしたいです.
このページではArduinoを用いて音楽を鳴らすことができる’MediaPalyer’を紹介します. 外部シールドを使わないで音楽を鳴らすことができます.
ただし以下の環境が必要です.
メインのArduino
下の音楽再生用のArduinoをコントロールするためのものです.
音楽を再生するためのArduino
MediaPlayerは音楽を再生するためのArduinoを必要とします. これはつまり音楽を再生する処理とそのほかのメイン処理を分けるということになります. こうすることで, Arduinoは音楽を再生するための処理に集中することができます.
対応しているArduinoについて
- 動作周波数: 8MHz, 16MHz
microSD
音楽ファイルを保存するために必要です
音楽ファイル
- 対応ファイル形式: Wave
- サンプリング周波数: 32KHz, 16KHz, 8KHz
- 量子化精度: 8bit
Arduinoで何か作品を作っているとき, その作品に音を鳴らせたい時があります. 本格的に音楽を鳴らすのではなく, 効果音としてちょこっと入れたいという意味です. 例えば, 簡単な早押しゲームを作るとして, ボタンを押したときの効果音を入れたいという時です. ですが, この効果音を入れたいために別のArduinoを用意するのはコストの点で好ましくありません. -オーディオプレイヤーのように音楽を鳴らしたい時は[Arduino/Arduinoで音楽を鳴らす]を参照してください.-
ここで, このMelodyPlayerがあります. このMelodyPlayerは新たにArduinoを用意する必要はありません. また, 音楽再生処理はバックグラウンドで行っているためメインプログラムに何も影響を与えません. メロディーを流しながら何か他の処理―LED点灯, ボタン入力など―をすることができます. あなたがすでに書いたスケッチのコードに一行"Play(’Melody名’)"と入れるだけでメロディーが再生されます.
MelodyPlayerができるのは以下の通りです.
- インクルードするだけで簡単にメロディー再生
- 簡単にメロディーを追加
ただしMelodyPlayerはピン3,9,10,11のPWM出力を妨げます.
OSは日常のあらゆる場所で目にします. パソコンには必ずと言っていいほどOSが走っており, 携帯, ゲーム機などにもOSが走っております. このような普段よく使うOSですが, そのOSの仕組みを分かっていても, 実際どのように作るのかはよく知られておらず気になります.
このページでは, 実際にArduinoで動くOSを作成することで, OSの理解を深めます. 使用するプログラミング言語はC言語です. (作成といいましても, すでに在りますFreeRTOSから必要な機能を抜き出し, Arduinoで動くようにしました.) なお, 今回扱うOSは汎用OSではなくリアルタイムOS(RTOS)と呼ばれるものです. 汎用OSとは, すべてのタスクに等しく優先度が与えられますが, RTOSではタスクごとに優先度を設定できます.
話の進め方ですが, 今回のOS製作では実装に重きを置くため, コードを中心に話を進めていきます. 各コードごとに簡単な説明を行い, その中で特に重要な部分―OSの仕組みに深くかかわる部分―もしくはさらに詳しい説明については別ページで行います. これら別ページ―詳細ページ―は子コンテンツである"仕組み"にまとめられています.
話の流れは次のとおりです.
- RTOSとは
- 目標と使い方
- 準備
- ファイル構成
- スクリプト
- ボードの設定
- 仕組み
対応状況
- Arduino UNO
- Arduino Mega
動作確認済み環境
- Arduino IDE 1.8.10
- Arduino AVR Boards 1.8.1
2021年12月現在, この記事で紹介している方法は古い可能性があります.
最新の方法について, microsoft 公式の以下のページか, 他の最新情報サイトをご覧ください.
WSL2上でUSBデバイスを認識させるために, VirtualHereを用いた方法を, Linux側でUSB/IPの機能を有効にする方法も含めて, 説明します.
OSは日常のあらゆる場所で目にします. パソコンには必ずと言っていいほどOSが走っており, 携帯, ゲーム機などにもOSが走っております. このような普段よく使うOSですが, そのOSの仕組みを分かっていても, 実際どのように作るのかはよく知られておらず気になります.
このページでは, 実際にArduinoで動くOSを作成することで, OSの理解を深めます. 使用するプログラミング言語はC言語です. (作成といいましても, すでに在りますFreeRTOSから必要な機能を抜き出し, Arduinoで動くようにしました.) なお, 今回扱うOSは汎用OSではなくリアルタイムOS(RTOS)と呼ばれるものです. 汎用OSとは, すべてのタスクに等しく優先度が与えられますが, RTOSではタスクごとに優先度を設定できます.
話の進め方ですが, 今回のOS製作では実装に重きを置くため, コードを中心に話を進めていきます. 各コードごとに簡単な説明を行い, その中で特に重要な部分―OSの仕組みに深くかかわる部分―もしくはさらに詳しい説明については別ページで行います. これら別ページ―詳細ページ―は子コンテンツである"仕組み"にまとめられています.
話の流れは次のとおりです.
- RTOSとは
- 目標と使い方
- 準備
- ファイル構成
- スクリプト
- ボードの設定
- 仕組み
対応状況
- Arduino UNO
- Arduino Mega
動作確認済み環境
- Arduino IDE 1.8.10
- Arduino AVR Boards 1.8.1
ここでは, 実際にタスクが作成されたときのメモリの構造を示していきたいと思います. メモリでの各領域の説明, この構造によるmallocの問題を示します.
私が製作に携わったゲームを紹介します.
コントローラ製作に関することについて説明します. 説明の項目は以下のとおりです.
- 部品入手
- 製作
- 説明
- 参考文献
サイズ固定のスタックを扱うライブラリを紹介します.
このStackは, 以下の特徴を持ちます.
- std::stack が使用できない状況下でのスタックの使用
- メモリを贅沢に使用しないサイズ固定スタック
- 例外処理に対応していない環境下での使用
サイズ固定の待ち行列ライブラリを紹介します.
このQueueは, 以下の特徴を持ちます.
- std::queue が使用できない状況下での待ち行列の使用
- メモリを贅沢に使用しないサイズ固定待ち行列
- 例外処理に対応していない環境下での使用
ここでは, 実際にタスクが作成されたときのメモリの構造を示していきたいと思います. メモリでの各領域の説明, この構造によるmallocの問題を示します.
サイズ固定の待ち行列ライブラリを紹介します.
このQueueは, 以下の特徴を持ちます.
- std::queue が使用できない状況下での待ち行列の使用
- メモリを贅沢に使用しないサイズ固定待ち行列
- 例外処理に対応していない環境下での使用