こんにちわ。停止状態から終了すると不正処理で落ちる事があったので、ご連絡させて頂きます。ソースを展開して眺めていたのですが、排他制御に問題が残っているようです。以下、簡単ではありますが、一時停止状態で終了した場合に多重開放で落ちてしまうのを回避する暫定的な対処です。◆ CloseWaveInputDevice() 関数- if( hGMemRecBuf != NULL ) GlobalFree( hGMemRecBuf )↓+ if( hGMemRecBuf != NULL ){+ GlobalFree( hGMemRecBuf );+ hGMemRecBuf = NULL;+ }ご参考になればと思います。> toshiさんすでに解決済みかもしれませんが、恐らく‘録音コントロール’の選択ラインが間違っているか、録音音量が小さすぎるのだと思います。タスクトレイのスピーカをダブルクリックするなどしてボリュームコントロールを開き、オプションのプロパティから録音を選択して、ライン選択と音量を調節してみてください。
ver.2.18をダウンロードしました。いつも精力的なアップに感謝いたします。このソフトに出会ったときは感激しました。何てったって、ほんの10年前にはこうしたスペクトラム表示が出来る装置は私の給料では買えなかった物です。今では、私のデスクトップには欠かせない代物です。たぶん、こうした画像表示のソフトは、商用アプリと比較されて、また新しい表示方法への取り組みに余技されて、終わりがない物と思います。でも、音楽ツールとしては欠かせないソフトで有ろうと思います。今後の発展とご活躍に期待します。よろしくお願いします。
ここに書いていいものかわからないんですが,ver.2.18も1.18,をDLし,exeを起動してもウィンドウはでてきますがスペアナが全く反応してません(--)winampで再生してますが普通に起動して音さえだせば動くんですよね?VBのランタイムはひととおりはいってると思います。原因が分かればお願いします!
要望なのですが、周波数の上限は現行だと10kHz付近だと思うのですが、20kHzか25kHz程度にまで上限を上げるような設定にできないでしょうか?一般的な音源でも10kHz以上の成分は無視できないと思いますので。。よろしくお願いいたします。
ご検討いただきありがとうございます。楽しみにお待ち申し上げております。
アナログ音源をPCで録音する際に入力レベルを確認するツールとしてNYSAを使う場合、たしかにオシロスコープにピークホールド機能があったほうが便利ですね。 録音レベルメータと銘打った他の方が作られた優れたフリーソフトもいくつかあるようですが、オシロスコープで波形が見えてなおかつピークレベルが検出できれば、ただ単に録音レベルを棒グラフで表示するよりも気分的に安心度は高いですもんね。(^^ゞ これくらいの拡張であれば大幅な変更は不要ですので(やってみないとわかりませんけど)、時間を見つけて挑んでみたいと思います。 機能拡張のご提言、どうもありがとうございました。>あかね様
こんにちは。オシロスコープは入力レベルや再生レベルの確認に大変重宝しています。レベルの確認の際は、MAX値に振り切れていないかどうかの確認が重要だと思うのですが、激しくオシロが振れますので振り切れているかどうかの確認が容易ではありません。そこで、オシロの波形を再描画する際に波形を消去しないで重ねて描く機能、または、それまでの最大レベルVmaxをy=Vmaxの横線で描く機能を追加していただけないでしょうか?このような機能があれば、レベル確認が楽になると思います。大変お手数をおかけしますが、ご検討のほどよろしくお願いいたします。
ながのさまありがとうございます。早速build218を利用させていただき、CPU使用率が高くならないことを確認いたしました。迅速なご対応をお礼申し上げます。
CPU使用率100%になってしまっていたバグを修正した v1.21-build 218 を公開します。取り急ぎ、コンパイル済みのバイナリのみの公開です。http://park1.wakwak.com/~y-nagano/Programs/Spectrum/beta/nysa121b218-exe-msvcrtdll.lzhこんなバグに今まで1年半も気付かなかった私って...。
77SO様、あかね様、ご報告ありがとうございます。Win2K や WinXP でも動作するとの報告をいただいております。個別メールよりも、当掲示板でのご報告が一番有り難いので感謝です。>77SO様■ 20kHz位まで表示/中央を1kHzに検討してみます。サンプリングレートが現在22kHz固定なのですが、音階モード以外の場合は44kHzサンプリングにすることで、帯域を広げてみようと思います。■ 表示モードの設定・保存「ショートカット作成」機能を使用すれば設定を保存することはできますが、前回終了時の状態に次回起動時に復帰する機能は、たしかにこれ以上機能を追加するのであれば必須かもしれません。レジストリを使用することを検討してみます。そのために現在、インストーラ/アンインストーラを作成するべく「msiSDK」を入手して勉強中ですが、...完成はいつになるのか断言できかねます。(^^ゞ■ CPU使用率100%これは、私が見逃していたバグでした。ご報告ありがとうございます。>あかね様原因は、メインメッセージループを実験的に書き換えたコードが混入していたためで、本来「GetMessage()」であるところが「PeekMessage()」APIに置き換わってしまっていて、メインメッセージループが止まることなく常時フル回転していたことによるものでした。現在、これを修正したバージョンの公開準備を進めていますので、しばらくお待ち下さい。
はじめまして1.20RC3だとCPU使用率は十分小さいのですが、1.21build210だとCPU使用率が100%になってしまいます。環境はMTV1000,MediaCruiseCPU P3-733Memory 512MBです。
はじめまして。v1.21 build 210 使わせていただきました。ありがとうございます。感想と希望を書かせていただきます。感想、報告*色の変更機能いいですね。*WIN2000で動作しています。希望*中央を 1kHz に*20kHz 位まで表示*表示モードの設定保存
確かに既存のGDI関数などのプログラミングもこれから覚えていきたいのですが根本の方針が誰にでも簡単に見てもらえるものという感じなのでやはりマルチプラットホームに一番近いのはOpenGLかと思っています。現にUNIXでやっていた音と映像のシンクロに関する研究を、Windows用に移植しようとしていたもので前回のような質問になりました。説明遅れましてすいません。しかしながらGDI関数やDirectXに関しておすすめの参考マニュアルなどオンラインでありましたらぜひ教えていただきたいです。関数郡がずらっとのっているだけではまだとっつきにくく、ソースをある程度公開しているページが望ましいのですが
ながのです。OpenGLは私は「プラットフォームに依存しないグラフィックライブラリ。特に3D描画に優れる。」という程度の認識なので、何もお答えできません。ごめんなさい。SGIのOnyxとか、もしくはOpenGLカードの付いたNTワークステーションでも使ってらっしゃるのなら別ですが、Win32で3Dグラフィックのプログラミングをするのであれば、個人的には DirectX8 をお奨めします。DX8で仕様がかなり変わって、プログラミングがだいぶラクになりましたし。DirectX8の「Direct3DX」ライブラリのドキュメントをぜひご一読下さい。(なんか私、Microsoftの回し者みたい。)再帰関数を使って花をプロットするという目的であれば、通常のWin32のGDI関数でいいのでは? 最近のビデオチップのドライバは、GDI関数もほとんどハードウェアで処理するので、充分高速にアニメーション表示できますよ。特定の環境(Win32)に依存したコードを書きたくないというのであっても、GDI関数のほとんどは、他の環境(たとえば X ToolKit や GTK++ など)でも似たようなものなので、習得した技術と経験はあんまり無駄にはならないと思います。回答になってなくてすみません...。
こんにちは。みなさんのソースが大変参考になります。個人的に波形表示をもっと表現力のあるものに変えて演出しようとしているのですがFFTによって音声データから描画のためのデータを受け取る際に僕はOpenGLにそれを渡してさらには一般的な再帰関数との組み合わせにより、花を描いてみたいのです。dBや周波数や前後の変化率を主な描画要素として色、形などに反映させるアイデアです。どなたかこの記事を見てくださったかた、ぜひお力を貸してください。なお、OpenGLはリアルタイムに値を渡せて描画が可能なC言語ベースのグラフィックライブラリだと僕は認識しています。よろしくお願いします。
岩瀬様、ご報告ありがとうございます。 私は基本的にはヒマ人なのですが、最近はちょっと他のことで忙しく、NYSAの開発はおざなりになってしまっています。 Windowsの音声入出力に関しては、MSDNのオンラインのドキュメントがやはり原典であり、サンプルコードも豊富なので、ぜひ一読されることをおすすめします。オンラインドキュメントは誰でも閲覧でき高価なMSDNサブスクリプションに入会する必要もなく、私のような貧乏フリーソフトプログラマにとっては非常にありがたい存在です。 NYSA1.21で使用している、DirectSound によるリアルタイム音声入力ライブラリのコードを公開します。NYSAで使用することを前提に作ったので、任意の瞬間の音声データを取得することを目的とし、レコーディング等の連続した音声データの取得用途には使用できません。参考までにどうぞ。 ヘッダ:http://park1.wakwak.com/~y-nagano/Programs/Spectrum/lib/WaveIn.h コード:http://park1.wakwak.com/~y-nagano/Programs/Spectrum/lib/WaveIn.cpp
こんにちは。はじめまして。光の計測にかかわっている遊び人の岩瀬と申します。かねがね「パソコン音声入出力は簡易で高機能の計測用途に使える」と思ってはいたのですが、信号の入出力の方法がわからず、二の足を踏んでおりました。ネット検索で長野様のページにたどりつきました。なんとソースコードを公開されておられるではありませんか!早速ダウンロードしました。これから勉強させていただきたいと存じます。取り急ぎご挨拶と御礼申し上げます。
知人から15"モニタを借りて、我が家のPCは復活しました。\(^o^)/今日からの3連休はテント泊登山に出かけてきます。梅雨明けしないことも多々有る冷害の地、仙台も、今年はそろそろ梅雨明けの気配です。
NYSA 1.21 build 210 にて、実行すると「録音開始できません」とのエラーが出て動作しない場合があるようです。エラー処理はきちんと行っているのでメモリリークなどの障害はないはずですが、実行できないのは困ったものです。その原因ですが、まだはっきりと究明できていませんが、DirectX8.0a をインストールすると動作することから、どうも無意識にDirectX8に依存したコードを書いてしまったようです。ソースさえ公開しておけば皆様に原因を究明していただくこともできたのですが...。代替CRTモニタが入手できるまでもうしばらくの間私のPCは部屋の置物と化していますのでご容赦ください。ところで、Windowsのサウンド録音API ――WinMM APIでもDirectSoundでもどちらでも―― では、録音デバイスは排他的で、同時には一つのプロセスしか開くことができないんですよね。(そんなことはないですか?)Linux の EsounD ライブラリのように録音も再生も同時に複数プロセスから行うことが、Windows標準APIで出来るといいんですが。(WindowsにEsounDを組み込むという手もありますが、それだとEsounDを使わないアプリではその恩恵にあずかれません。音声を扱うすべてのアプリケーションで標準的に使用されるAPIに同時録音機能が実装される必要があるのです。)NYSAのような単機能ツールは、同時に他のソフトと使ってこそ威力を発揮するので、なおさらそのことを痛感します。話がちょっと脱線しました。今日のところはこのへんで。これにて私は帰宅するので、またしばらく書き込みできません。ごめんあそばせ。
おきざき様、書き込みありがとうございます。倍音成分と基本音をいかにして分離し人間の聴覚さながらに音階を認識させるか、という命題はなかなか奥が深く、プログラミングの課題としてたいへん面白いものがあります。私のツールは、FFT(現バージョンのNYSAでは離散コサイン変換を採用しています)の結果をただグラフィカルに表示するだけという、シンプルなソフトウェアに過ぎませんが、おきざき様のプログラミング世界への復帰の一助を担えてたいへん光栄です。(^o^)丿現在の私の力量ではまだ成し得ていませんが、こういうソフトが作れたら楽しいだろうなぁというアイディアとして:Wave to MIDI 変換ツール(これはさすがに難題山積です)リアルタイムギターコード表示ツール(CDの音楽からコード表を出力できれば楽譜買わなくても弾き語りできちゃうじゃない、スバラC!)市販のオートチューナーと同等のギターチューナーなんてのができたらいいなぁ、と思っています。面白いツールができましたら、ぜひぜひ公開してください。楽しみにしています。ところで、私のPCの8年物のCRTモニタが、先日突然破裂音とともに煙を噴いて壮絶な最期を遂げました。代替マシンを所有していない私は、現在趣味のパソコンいぢりが不可能な状態なのです。今日は知り合いのところからネットにアクセスして書き込みしてるのですが、資金繰りをなんとかしてNewモニタ購入のメドが立つまで、我が家のPCの中に眠るデータにはアクセスができません。NYSA 1.21 も現在公開しているバイナリ版ではサウンドドライバに依存したコードになってしまっているようで、環境によっては動作しないみたいです。改訂版とそしてソースコードを公開しないといけないのですが...。うーむ。
下の低音部の話ですけど、マイクが悪かっただけでした。すみません。ハウリングを起こすのでマイクの再生を切っていたのでマイク不良に気が付きませんでした。それと、音声の音階認識への応用は倍音部のレベルが一定以上ないものを候補から外したらまあまあの感じになりました。棒グラフでビジュアルにしていただいているので、色々見ながら特性を調べることができてNY Spectrum Analyzerのおかげです。フリーのWave to scale というツールで確認した特性をNY spectrum analyzerでリアルタイムに目で見て確認するようにしています。一時はWaveletとか色々考えたのですが、このツールで特性を見るうちにFFTで十分だという気がしてきました。ただ、まだぜんぜんノイズ対策を考えていないのでFFTでいいかどうかわわりませんが・・・。(将来PocketPCで音声でメロディーを記録できるようにツール作りたいと考えているのでノイズ対策必須なので・・・、その前にWindowsCEではMIDIがないのでイメージ通りの認識ができているかどうか確認するためのMIDI出力が標準では出せないですが、まずはPC版でうまくいってから考えます。)本当にこのツールのおかげで10年ぶりくらいにプログラム作る気がおきました。ありがとうございます。
Ver1.20(1.21はためしてません)では、低音域の精度があがった分、音声をAnalizeすると音声の音階部分に現れるピークが周辺音に邪魔されて見えにくくなった気がするのですがでも、パソコンのMIDIとかで鳴らした音はほぼ100%音階部分の周波数がピークとしてでますね。すばらしいです。音声から音階を正確に抽出する方法を勉強中ですがNY Spectrum Analyzerはツールとしてピーク部分の音階名を画面に表示したりして使わせていただいています。ありがとうございます。人間の声って結構いいかげんで、強く現れる倍音部分の波でフィルターかけたりするとか色々やってますが、音階認識って結構難しいです。これからも頑張ってください
v1.21 正式版公開に向けてのプレビューです。今回に限り、申し訳ありませんがソースなしのバイナリのみの配布です。ソースはもちろん公開する予定ですが、ドキュメントの整備が整うまでもうしばらくお待ち下さい。ドキュメントなしのバイナリのみのパッケージですので、再配布は御遠慮ねがいます。ぜひダウンロードしていただき、機能に関して試用レポートを頂けると幸いです。→ http://park1.wakwak.com/~y-nagano/Programs/Spectrum/beta/nysa121b210-exe-msvcrtdll.lzh
抽象的な説明しかできませんが、お役に立てたのなら光栄です。頑張ってください。>鉄さんNYSA 1.20 もなんとか正式版を公開できるよう頑張ります。/* 今さらなんですが、ソースコードの汚さが気になって恥ずかしくなってきました。 ソース公開の原則は貫きたいですが、それが足かせになっているような...。*/
丁寧なアドバイス本当にありがとうございます。早速、ながのさんのアドバイスをもとに頑張ってみます。NYSA 1.20 の公開楽しみにしています!頑張ってくださいね!
>鉄さん Win32でC/C++言語でのプログラミングの話であると仮定します。 詳しい説明はとてもこの場では書けないほど長文になってしまうので、MicrosoftのMSDN Onlineのドキュメントへのリンクを貼っておきました。そちらをごらんください。もしお手許にMS Developer Studioがおありでしたら、SDKドキュメントのMultimediaあたりをぜひ一読されることをお奨めします。ステレオ2chの録音の方法は、モノラル録音の場合とほとんど変わりません。サウンドデバイスをOpenする段階で、旧来の Windows MultiMedia API を使うのであれば、waveInOpen()に渡すWAVEFORMATEX構造体のnChannelsを2にするだけです。[リンク] waveInOpen() API のリファレンス→ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/mmfunc_1q5q.aspDirectX を使うのであれば、IDirectSoundCapture::CreateCaptureBufferのパラメータで同様に指定するだけです。[リンク] DirectX でのサウンド録音の方法→ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dx8_c/hh/dx8_c/audio_using_4u9b.aspこのようにしてデバイスをOpenして録音を開始すれば、あとはステレオ2chのデータがバッファに入って来ます。 バッファの構造は、モノラルの場合はサンプル順にデータが並んでいるだけですが、ステレオの場合はサンプル毎に左チャネル・右チャネルのペアがサンプル順にデータが並んでいます。ですから、交互にデータを取り出せば、左右チャネルのデータを別々に取り出すことができます。Win32プログラミングの知識がもしほとんどないのであれば、上記の解説だけではちょっとキビシイかもしれませんね。でもそれをゼロから解説すると本1冊分くらいになってしまうので、カンベンしてください。Windowsでのプログラミングを覚えたいというのであれば、やはりMSDNのドキュメントを読むしかありません。Win32プログラミングの基礎的な知識がある上で、マルチメディア系のAPIを覚えたいというのであれば、これから覚えるのであれば、DirectX APIを使うことをお奨めします。Windows98/2000以降のOSであれば、DirectXは標準装備ですし。DirectX API の DirectSoundCaptureCreate() を使えば、C++のオブジェクト指向が使える上に、録音バッファの確保もDirectXがやってくれるのでプログラミングがラクです。もし目的が音声の勉強で、あくまでその道具としてプログラミングを覚えたいというのであれば、Win32プログラミングの勉強をすることはあまりお奨めできません。音声を録音してRAW形式(生データ)でファイル保存ができるツール(市販ソフト/フリーソフト問わずたくさん出回っていると思います)を使って、それを解析したほうが本題の音声の勉強に集中できるでしょう。ファイルに落としさえすれば、コンソールベースの簡単なCプログラムで処理できますし、Perlなんかのスクリプト言語でも処理できますし。音声のスペクトル分析を行うのであれば、私のNYSAは楽しさ優先ソフトなので精度はイマイチです。NYSAのページでも紹介している、efuさん作のWaveSpectraがおすすめです。→ efuさんのページ http://www.ne.jp/asahi/fa/efu/ こんな説明でいかがでしょうか? なんか説教くさいこと書いてすみません。 NYSA 1.20 ですが、我ながら完全なペーパーウェアと化しています。予告だけでいつまでたっても公開されない次期バージョン(+_+)。私の意欲次第なんですが...。
はじめまして 鉄といいます。音声の勉強に NY Spectrum Analyzer 1.18 を使わさせてもらってます。まだ、音声の勉強をはじめて日が浅いので分からないことばかりです・・・。1つ質問があるのですが、ステレオマイクから入力されたウェーブデータを左右 別々に取り込みたいのですがプログラムをどう書いたらいいかわかりません。何かいいアドバイスを頂けないでしょうか?こんな風に書いたらいいっていうプログラム例を教えて頂けたらうれしいです。とても初歩的な質問ですけど、よろしくお願いします。
新バージョンの進捗状況ですが、音階表示低音域の精度をさらに上げるべく、現在、計算法を見直しています。これに伴い、スペクトル計算ライブラリを全面的に書き直しています。DirectSound を使うようにしたことで DirectX が必須となりましたので、描画部分も完全に DirectDraw に書き替えようと思っています。(ただ、現行の DIB を使用した描画でも十分高速なので、DirectDraw 移行の必要性はまだ検討中です。)※ 現行の v1.20 では、描画は DIB を使い画面転送のみ DirectDraw を使用しています。これらの改良を施した新ライブラリを使用したバージョンを、2本立てで開発しています。【v1.21系列】従来と同じUI。見た目も機能も全く同じ。計算・描画部分のみ新エンジン。→近日公開予定【v2.0系列】新エンジンの機能を完全に生かすべくUIを刷新し、増えた設定項目をiniファイルに保存できるようにする予定。→しばらく先になりそう...という予定ですが、電話料金滞納により我が家の電話が止められてしまうので、しばらく私はネットにアクセスできません。新バージョン公開も電話が復旧してからになります。ご了承ください。
ソースコードを大幅に見なおして再構成した、新バージョンを近日公開できそうです。画面デザインなどはほとんど変わりませんが、ソースコードのモジュール性を高め、リアルタイム録音、リアルタイムタイマー、スペクトル計算の3つのライブラリは単独で再利用可能にしました。録音部分には DirectSound を使用することで、ソースコードは従来よりずっとシンプルになりました。今まで手抜きだったスペクトル計算をきちんと行うようにし、ソースコードレベルでは、dB単位で任意のレンジでデータを取り出せるようになりました。(User Interfaceは未完成)画面更新間隔も、ソースコードレベルでは任意の時間(ms単位)を指定できます。オシロスコープのレンジも、ms単位で設定可能。(これもUIは未完成)問題は、それらの追加機能をどのような User Interface で実装するか、ってところなんですが、「操作はボタンのみ」というUI設計方針を貫くとこのままではボタンだらけになってしまい、かえって操作しにくくなりそうで、只今悩んでいるところです。ヒマを見つけては少しずつ作っているので、いつ公開できるかは未定ですが、とりあえず予告ってことで...。
当サイト移転に伴い、Infoダイアログ内のURLを修正した、v1.20RC3を公開しました。URL変更以外は、RC2と全く同一です。また、RC3には、HTML Help形式の取扱説明書(β版)を添付しました。このページ上部の[Download Beta]よりnysa120RC3-exe-msvcrtdll.lzhをダウンロードしてお持ち帰りください。開発室版は当サイトでの直接配布のみで、再配布を禁止しています。また、開発室版ソースコードセットにはFFTライブラリが含まれていませんので、公式版のソースコードセットからfftsg.cをコピーしないとコンパイルできません。