lynxeyedの電音鍵盤

組み込みとか電装とか

ADPCM

10bit版リリース

サンプリング周波数の向上を目指し、アセンブラ記述やアルゴリズムの改良を試みたのですが、やはり3.3V駆動(=CPU 12MHz)だと12kHzステレオが限界の模様です。 いいアルゴリズムを思いついたら改良したいと思います。(てきとー)ダウンロードはコチラから(バ…

音質を9bit分解能に向上

この間のリリースが最後の安定版と言ったものの……。twitterにて、ADPCMデコードにおいて1ないし2bit分解能向上させても処理速度は変わらないのではないか…という指摘を頂戴しました。 結果、確かにその通りでした。PWMの動作周波数の上限などを考慮し、9bit…

DAC出力タイプADPCMデコーダ

AppNoteをもとに実際に回路を構成し直しました。音声出力はPWMそのものではなく、SCBlock経由でアナログ出力としています。 GOE0,GOE1経由でPWM出力をアナログブロックカラム0,カラム2へ入力しますが、 これはGUIではできないので、main.c側で AMD_CR0 = 0x2…

SSM2301を使ってみた

CypressのPWM8に関するデータシートを見ると、3.3V駆動またはグローバルバスに出力する際はPWMに供給可能なクロックは最大12MHzのようです。 従ってPWM8の場合、キャリア周波数は40kHz強という事になります。 音声領域を取り扱うには厳しい物が有りますが、…

PSoCの最終奥義

ダイレクト録音機能に対応しました。 イヤホン端子がそのままマイク端子になります。 PSoCはダイナミックリコンフィグレーション(以下DRC)という便利な機能があるので回路構成の動的変更にDRCを使いました。 録音フォーマットはraw PCM(8bit,12kHz,mono)です…

PC側エンコーダの修正

エンコーダの一部を修正しました。 しかし変換ロジックは変えてないので再変換の必要はありません。 相変わらずコマンドラインなので、フロントエンドを作りたいと思うのですが…なかなかそこまで時間が取れないのが現実です。使い方は以前に書いたのですがそ…

計画倒れの予感(前編)

秋月で200円で売っているPSoC、CY8C24123Aでダイナミックリコンフィグレーションしてみようと思いADPCMデコーダの内部構成を2パターン用意しました。 でも、実装は無理な予感 いままでのADPCM(ver0.01f)デコーダのコンパイル結果 ROM 66% full. 2675 out of…

立て続けに更新

会社帰りにふと思いついたことがあり、デコードパラメータを改良してみました。 今まではC言語で10個の増分パラメータの配列を記述していました。これはiMageCraft Cで12kHz,stereoの音声を発音するのに時間的に限界のパラメータ数だったからなのですが… M8C…

バグ修正

twitterでバグの指摘を頂いたので修正しました。 【修正内容】 ファイル位置クラスタをルートディレクトリエントリから取得する際、下位8bitからしか取得しておらず、再生の挙動が不定になるバグを修正 ダウンロードはコチラから(プロジェクト全部)バージョ…

デコード関数を全てアセンブラ化

インラインアセンブラは便利ですが、コンパイラの変換ロジックが変更されてしまうとバグの原因となるだけでなく、ソースコード自体が見づらくなります。 そこで、ADPCMデコード関数を全てアセンブラで記述し、Cからも呼び出しができる様にしてみました。(ext…

iMageCraft向けにリリースしました

CY8C24123A向けのADPCMデコーダをリリースしました。 IMAGECRAFT CはHi-TECH Cに比べて処理が低速、容量が肥大しやすいので、 main関数以外の一部をインラインアセンブラで記述しています。 main関数内のソースコード変更は差し支えないですが、main以外のサ…

iMageCraft Cのフリー版をお使いの皆様へ

iMageCraft Cだと、現状のソースだと12kHz、ステレオの再生速度に追従できないようです。対処方法を以下に示します。(iMageCraft Cのみ) インクルードファイルadpcm_ima_dvi.c(main.cと同じフォルダにある)を開いて、28行目 dlevel =… をコメントアウト 29〜…

8pinのPSoCでもFAT

秋月で200円で売っているCY8C24123Aで簡易ADPCMプレーヤを制作しているわけですが、PSoCはCY8C29x66以外のデバイスはFATライブラリが用意されていないため、各自製作する必要があります。 結局FATライブラリーをフルスクラッチビルドで導入してみました。 と…

京大のサマーキャンプが何やら楽しそうな事を…

2回生向けエレクトロニクスサマーキャンプ Programmable System-on-Chipを使って音の出るものを作ろうすごく面白そうです。 ワンチップマイコンは各社からさまざまなチップが発売されていますが、Cypress社のProgrammable System-on-Chip (PSoC)は、 アナロ…

sourceforge.jp

sourceforge.jpにUPしてみました。 まだまだ「玄人志向」になってる*1ので、これから充実させる予定です。 PSoCのM8コア向けですが、ARM,8086互換PSoCへの対応もしていくと思*2。 何か要望やお気づきの点がが御座いましたらメールください。http://psocvoice…

ADPCMデコーダ

解析ソフトとオシロスコープを使ってパラメータを調整してみました。 結構難しいですね…。 割り込みを使用すると再生スピードが追いつかないので使用していませんが、これは音程がぶれる大きな原因のようです。 デコードの過程で音声データ次第ではタイミン…

ADPCMエンコーダ、デコーダバグ修正

【PSoC側の修正】 ステレオ用のPSoC ADPCMデコーダ向けに書き直しました。アナロググラウンドを廃止し、全てグラウンドはVss共通になっております。 なお、ソースはIMAGECRAFTコンパイラ用です。Hi-Tech C Liteでもコンパイル可能ですが、再生速度が遅くなり…

使ってみた

いつもLiteバージョンでコンパイルしてると、英語で 「PRO版だと今のサイズの45%まで縮小できるよ」 的なむかつく自慢メッセージが出てくるので、実際に試してみました。 結果、今までと容量は半分のサイズになり、速さは2倍の速度になりました。ただ$1500.…

ADPCMステレオ化

いらねーって思われる方も多いかとw でもここまで作っちゃうとやってみたいと思うのが人情ですよ(ぇ?で、エンコーダはadpcm8s.exeとなります。 【使い方】 ステレオADPCMデータへのエンコード コマンドプロンプトにて adpcm8s.exe [入力ファイル名] [出力…

電流争奪戦

PSoCから音声を出力させ、LPFを介してイヤホンに繋げると…余裕で150mAを超えていました。音量が高くなると音声がいきなり歪んだり、CPUの動作が不安定になるのはこのあたりが原因かも。(∩へ`)やっぱFET使うか。 うーん。 パーツケースにトランジスタのスト…

PSoCのADPCMデコード高速化

32kHz,mono,ADPCMに対応しました。 ADPCMエンコードは同梱のエンコーダにてお願いいたします。32kHzに対応してももともとが8bitなので微妙な音質ですけどねorz 音質はAMラジオほどでしょうか? でもアンプしだいで改善可能とは思いますけど。http://firestor…

ADPCM Encoder for 8bitPCM

もうこのネタ何回目なんでしょうか? 自分でも覚えていません。PSoCはすぐに使わなくなると思っていたんですが。 なぜか今はバイト先の設計でも使うという顚末。 もう、2009年ですねw そろそろ巷で噂されている、ARMコアが入ってるPSoC3、出るのでしょうか…

あ。思い出した。

22kHzステレオのADPCMのヘッダは…1024バイトごとだな。 512バイト毎にヘッダの読み飛ばしやってた。 それだと、 2回に1回はヘッダじゃなくてデータだからねorz 相変わらずボケが多いな。

何か根本的に間違ってる

PSoCでやってるADPCMデコーダですが、dsPICに移植してみたところ、音量がグヮングヮンorz なんじゃこりゃー

エンコーダソフトができた

ヘッダを読み飛ばしたり、16bitデータに展開する所を無理やり8bit展開するために魑魅魍魎パラメータを作ってみたりしましたが、やっぱり、最初から8bitPCMを圧縮(エンコード)して、8bitPCMに戻して(デコード)やればいいんだなと…思いました。 ではREADME的な…

地雷のオリジナルADPCM

バイト先でプログラムを入力しているときに、迷走スイッチが入ってしまいました。(爆オレ1「やっぱ"独自規格(企画w)ADPCM”っていいんじゃね?」 オレ2『うんうん。PSoCに負荷がかかりにくいようにヘッダなしで作れるしね』オレ1「だよな。わざわざMicro$…

更新

各ADPCMファイルのEOFに対応しました。 EOF到達で自動的に次のファイルへスキップするようになりました。こちらからダウンロード http://firestorage.jp/download/36b168dac4bdcd4231dc05aa70425cfc1eca5ea3今後の目標として、 SDカード内にリニアPCMとADPCM…

サンプリング周波数によってブロック長は違う

友人からブロック長が違うという指摘をもらいました。 (ADPCMの1ブロック)=(チャネル数)*(サンプリング周波数)/11k*256 つまり、IMA ADPCM,22.05kHz,monoの1ブロックはこの計算式から512byteバイナリエディタでみてみると… ほんとだぁ(・∀・)笑 というわけで…

Now UPDATE

">いつもの場所にUPDATEしました。 DOWNLOAD ->[pcm_psoc.zip]Microsoft IMA ADPCMはヘッダがfactチャンクを含め全部で60バイトなので, ブロックのはじめの60バイトをSEEKしてリード*1しています あと、PWMから先のLPFはまだ完成していません。(パラメータ入…

ADPCMブロック

Microsoft IMA ADPCMでは1ブロックが モノラル 256byte ステレオ 512byte で、定義されているようです。 つまり、1ブロックごとに (16bit PCM) + (4bit ADPCM) + (4bit ADPCM) + ..... と続いているわけで、これを何も考えずにrawなADPCMデータとして変換し…