• 締切済み

関数の数式入力を音源ファイル出力するフリーウェア

mathematica や Matlab などの高額なソフトを使わないで 子供が三角関数の学習のために 数式を入力して、その波形がどのような音に聞こえるかを 家の中で自分で遊びながら学べるようにすることができる フリーウェアを探しています。 Windows 7 で作動するソフトをご紹介下さい。 もし、ソフトがない場合には、自作で波形関数の数式を音声出力させるための コードあるいはライブラリーをどのように見つけたらよろしか お教え下さい。 よろしくお願いいたします。

みんなの回答

  • wek00
  • ベストアンサー率61% (91/147)
回答No.3

FunctionView http://www.vector.co.jp/soft/win95/edu/se104723.html Swave http://www.vector.co.jp/soft/win95/art/se089386.html グラフ関数電卓系と効果音作成系ですね。数式・関数・計算などのキーワードでヒットしました。 Win7ならNT4用辺りからなら動くものも珍しくないんじゃなかったかな... もっと これだ! というものがあったような気もするんですが。 参考: 質問の要件からは外れるものの、類似のソフトであり良い参考になるでしょう。 旧Win用はお持ちの環境では実行が難しいかもしれませんが何とかして 是非一度お試しください。 音知 http://www.vector.co.jp/soft/win31/art/se025492.html Sound Creator http://www.vector.co.jp/soft/win95/art/se058903.html 効果音めーかー http://www.vector.co.jp/soft/win95/art/se045171.html 効果音メーカー : WEBブラウザ上で効果音を作成できる無料ツール - PEKO STEP http://www.peko-step.com/tool/soundeffect/

  • wek00
  • ベストアンサー率61% (91/147)
回答No.2

Mathematica や Matlab、S言語といった数値計算ソフト(?)には クローンや類似の機能を持ったフリーソフトがあったりします。 数値計算用:   Scilab     日本語ドキュメントが充実しているのでオススメ。     本件で必要な機能は一通り揃っているのではないでしょうか。     デモとそのソース参照。evalもあるしGUIも作れるし     ウィンドウ枠なしの全画面表示も一応自前でできる。     helpにはサンプルコードの実行ができるものがあり     そこでコードの編集もできる。     (組込エディタを使用。起動コマンドはedit)     「Scilab GUI」でWebページを検索してみるのもいい。   Matlabクローン:     Octave     FreeMat 統計計算用:   S言語クローン:     R言語 数式処理用:   Maxima   Risa/Asir   ※Mathematica・Mapleを含め使ったことが無いので詳しいことは。    数値計算機能はあるようです。 plot関数など、特に画面表示を行う関数の多さと機能の豊富さと出来の良さは商用には遠く及びません。 (開発元がそこまで用意して無いだけなので自分で書けばできます) 最近は Python が人気ですね。猫も杓子もPy。NumPy や SciPy があれば Matlab いらんという人も多いのだとか。 Mathematica は以前から、Matlab は近年になってですが家庭向けのタダ同然の安価な販売形態がありますので是非ご検討ください。 商用はいい!一度使うと他のものは使えないレベルです。 JavaScript で波形生成&音再生は以前試したことがあります。よく覚えていませんしコードはどこかへ行ってしまいました。XP時代のULCPCだったしただ書いただけでシングルスレッドだったし書き方が悪かったかも知れないですが、1秒分生成するのに10秒程度まで改善したものの大幅な改善が難しそうな感じだったので諦めました。(Scilabは比較的低速ですが、同様の処理を最も低速な書き方で30秒、高速な書き方なら1/100秒) ブラウザで実行する関係上ローカルのストレージ上のデータの読み書きが面倒な上に制約が多いという難点もあります。ローカルネットワーク上にwebサーバを置いてサーバサイドで処理する仕組みのほうが結果的に簡単に済むかも知れません。 OKwaveのようなところで訊いてみればあっさり解決するかも知れませんね。 spwave のような生のバイナリデータを扱える音声ファイルエディタもありますので変換・再生機能はそういうものに任せてもいいでしょう。 描画を Gnuplot などに任せることもできます。(以前 Octave がそのようにしていました) 事実上ほぼ全ての言語・環境・ソフトウェアでお望みのことはできることになります。 有名どころはもちろん、 とっつきやすそうなところ(GUI機能を自前で持っているスクリプト実行環境)では   Hot Soup Processor (日本生まれ)   VCSSL (日本生まれ。ドキュメントが良く整備されている)   Squeak (目的には非常に合っている。しかし日本語情報は少な目)   LibreOffice(StarBasic) フリーじゃ無いけど Microsoft Excel(VBA) も圧倒的な利用者人口が絶対的に有利ですのでおすすめです。 コンパイル型の言語で起動後に数式を変更するとなるとパーサが必要になりますが、自分で書かなくてもコンパクトでフリーなコンパイラというのもあるのでそれに渡して処理させることができます。 参考: spwave http://www-ie.meijo-u.ac.jp/~banno/spLibs/spwave/index-j.html // 以下Scilab用コード samplecode1.sce の中身。 // コンソールに // exec samplecode1.sce; // などと入力して実行する // Play で再生 // Eval で数式を評価 // 数式のyの値がグラフ表示・再生されます。 // 数式は末尾に ; (セミコロン)をつけます。一行に複数書けます。 funcprot(0); //エラー抑制 //// //// sub //// //// function plot_sub(container) drawlater(); if ~isempty(ha.children)   delete(ha.children); end sca(ha); ix = 10900:11200; //表示区間は決め打ち plot(ix, container.y(ix),'.-','Markersize', 2) drawnow(); endfunction //// //// callback - play //// //// function pb_callback(s, Fs) playsnd(0.25 * s, Fs); // 振幅を少し小さくしてますが音量注意 endfunction //// //// callback - eval //// //// function ev_callback(container) fs = container.fs; t = container.t; execstr(hc2.String); //エラー対策してません! container.y = y; plot_sub(container) // Saving Data container = resume(container); endfunction //// //// main //// //// funcprot(1);  //エラー抑制を戻す fs = 44100;   //サンプリング周波数 t = 0:1/fs:.25; //0からXX秒までの時刻データの配列(1行だけの行列) y1 = sin( 2 * %pi * ( 440 * 2^(-9/12) ) .* t ); // sin(2πft) 約XX秒のデータ y2 = sin( 2 * %pi * ( 440 * 2^(-7/12) ) .* t ); y3 = sin( 2 * %pi * ( 440 * 2^(-5/12) ) .* t ); y4 = sin( 2 * %pi * ( 440 * 2^(-4/12) ) .* t ); y5 = sin( 2 * %pi * ( 440 * 2^(-2/12) ) .* t ); y6 = sin( 2 * %pi * ( 440 * 2^( 0/12) ) .* t ); y7 = sin( 2 * %pi * ( 440 * 2^( 2/12) ) .* t ); y8 = sin( 2 * %pi * ( 440 * 2^( 3/12) ) .* t ); y = [y1 y2 y3 y4 y5 y6 y7 y8]; //全部をつなげる //GUI作成 hf = figure(100,'position', [150, 32, 800, 400]); //button hc = uicontrol(hf, 'Style', 'pushbutton', 'Callback', 'pb_callback(container.y, fs)', ...   'unit', 'normalized', 'Position', [.85 .15 .1 .1], ...   'String', 'Play'); //button hc3 = uicontrol(hf, 'Style', 'pushbutton', 'Callback', 'ev_callback(container)', ...   'unit', 'normalized', 'Position', [.85 .3 .1 .1], ...   'String', 'Eval'); //edit box //複数行の編集を可能にする場合は付属のTCL/Tkやエディタを使うほうが良さげ。 str = ['y1 = sin( 2 * %pi * 262 .* t ); y8 = sin( 2 * %pi * 523 .* t ); y15 = sin( 2 * %pi * 1047 .* t ); y = [y1 y8 y15];']; hc2 = uicontrol(hf, 'Style', 'edit', 'Callback', '', ...   'unit', 'normalized', 'Position', [.05 .85 .9 .075], ...   'String', str); //描画領域 ha = newaxes(); ha.axes_bounds = [0 .1 .9 .9]; //受け渡し用変数にデータを格納 container.fs = fs; container.t = t; container.y = y; plot_sub(container);  //plot pb_callback(y, fs)   //初回再生

  • f272
  • ベストアンサー率46% (8469/18132)
回答No.1

面白そうだったのでpythonで作ってみた。 import numpy as np import wave x1 = np.linspace(0, 2*np.pi*262, 44100) #0から2π*262までの範囲を44100分割したxの値を作る x2 = np.linspace(0, 2*np.pi*294, 44100) #以下同様 x3 = np.linspace(0, 2*np.pi*330, 44100) x4 = np.linspace(0, 2*np.pi*349, 44100) x5 = np.linspace(0, 2*np.pi*392, 44100) x6 = np.linspace(0, 2*np.pi*440, 44100) x7 = np.linspace(0, 2*np.pi*493, 44100) x8 = np.linspace(0, 2*np.pi*523, 44100) x = np.hstack((x1, x2, x3, x4, x5, x6, x7, x8)) #全部をつなげて44100*8個のデータを作る y = (32767*np.sin(x)).astype(int) #対応したyの値をsin関数で作る.振幅は±32767の整数値 w = wave.Wave_write("output.wav") #書き出しファイルの指定 w.setnchannels(1) #チャンネル数1=モノラル w.setsampwidth(2) #サンプルサイズ2バイトは上記の振幅に対応 w.setframerate(44100*8) #サンプリングレート(1秒間のデータ個数)は上記のデータ個数と同じなので1秒間の音声になる w.writeframes(y) #ファイルに書き出し w.close() #ファイルを閉じる 適当に遊べるんじゃないかな。 Anacondaをインストールすればpythonと付属のライブラリが使えるようになります。

mqm
質問者

補足

早速のご回答をいただき、とても感謝しております。 Python を使ったことがありませんが、ブラウザー上で javascript を用いて 同じ動作をさせることが可能でしょうか。 もし JS で無理な場合には、Cの初心者レベルのコードを何とか フリーのコンパイラーで試してみるくらいの作業は 子供の学習用教材として週末に取り組んでみれるかもしれません。 よろしくご指導のほどをお願いいたします。

関連するQ&A