CとCGIを使って、自分の声を録音した音(wav形式)を電話を使って発生させたいのですが、どうしたらできますか?
1.PCのweb上で、電話番号を選択
2.電話が通じたら録音したwavファイルを再生
3.電話を切る
という手順にしたいのです。
つきましては、電話をかける、wavファイルを再生させるところのプログラムをどのように書けばよいか教えて下さい。お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。

itohhといいます。

簡単(?)に、実現する方法はCTまたはCTIと呼ばれているパッケージを導入することです。
ただし、結構な金額を要求されると思います。(うん十万円?うん百万円?)
たまに、Faxボードに安価なアプリケーションが付いていたりしたのを
見たこともありますが...

gooのトップで検索してみてください、結構な数がヒットすると思います。
検索例。CT 電話
    • good
    • 0

それはもしかしたら非常に難しいことかもしれません



モデムの仕様(書)には3階層あり

1.電話をかけてデータのやりとりをするATXコマンド
2.FAXの送受信を行うFAXコマンド
3.モデムで音声を送るボイスコマンド

このうちの1と3を使えばできるのですが
1はともかく3は、その仕様があまり公開されていない上に
非常に難しいようです。なぜならパソコンとモデムとは
「デジタル」でつながっているのですがそこに
「アナログ」の音声データを送信するには
パソコンから「PCMデータ(WAVE)」として
データを送信し、それがモデム上のA/Dで
音声になって送られるという仕組みだからです。

この3の部分がライブラリとして公開されていて
それが使うことができるなら非常に簡単に
作ることができると思いますがそうでない場合は
あきらめないといけないかもしれません。
(僕はあきらめました)

ちなみに2や3の仕様書は辞書以上に分厚く
何万円という値段でした。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QC# wavファイルの再生について

C#に関しての質問なのでこちらでいいのかわからないのですが、タイトル通りwavファイルの再生についてです。

環境は .NET2003 です。

現在、学校の卒業制作としてC#でゲームの開発を行っているのですが、音楽ファイルの再生の仕方で困っています。
検索してみたところ、playsoundを使用したループ再生には非同期とループを指定すればいい、とありましたが
うまく動きませんでした。
そこでThreadを使用しsleepを使うことで擬似的にループ再生をさせているのですが、それだと都合の悪いことが多く別の方法を探しています。
お力になっていただける方がいれば、宜しくお願いします。

↓は現在のソースから抜き出したものです。


[DllImport("winmm.dll")]
private static extern bool PlaySound(string pszSound, int hmod, uint fdwSound);


static void Main(){
   Thread t1 = new Thread(new ThreadStart(play));
t1.Start();
Thread.Sleep(1000000000);
}

public static void play(){
PlaySound("daichi.wav", 0, 0x00001 | 0x00008 );
}

C#に関しての質問なのでこちらでいいのかわからないのですが、タイトル通りwavファイルの再生についてです。

環境は .NET2003 です。

現在、学校の卒業制作としてC#でゲームの開発を行っているのですが、音楽ファイルの再生の仕方で困っています。
検索してみたところ、playsoundを使用したループ再生には非同期とループを指定すればいい、とありましたが
うまく動きませんでした。
そこでThreadを使用しsleepを使うことで擬似的にループ再生をさせているのですが、それだと都合の悪いことが多く別の方...続きを読む

Aベストアンサー

#2です。

Thread.Sleepについて誤解があるようですね。

Thread.Sleepを使ったのは、ループ再生が確認できるだけの時間、Main()から戻りたくなかったからです。ゲームはいきなり終了する事はないわけですから、Thread.Sleepを入れる必要はありません。ボタンが押された時や、その他なんらかの条件でPlaySoundを呼び出しやればいいだけです。

PlaySoundを非同期指定で呼び出すと、内部でスレッドを作成しバックグラウンドで動作しますが、その事とThread.Sleepを使う事とは全く関係ありません。ファイルを読み続けていても、画面を更新しつづけていても、その結果に大きな違いはありません。

スレッドというのは、CPUを割り当てる単位です。
CPUは1つだと仮定しますが、スレッドはOSを起動した直後でも数百くらいは存在しています。そしてOSは実行する必要があるスレッドの1つにCPUを割り当てて実行するか、実行すべきスレッドが無ければCPUをスタンバイ状態にします。
Ctrl+Alt+Delteでタスクマネージャーを起動し、パフォーマンスで確認すれば、スレッドの数もわかりますし、CPU使用率もわかります。
CPU使用率が0%であるという事は、全てのスレッドが、Thread.Sleepを呼び出したのと同じような状態になっていて、何もしていない事を意味します。
プログラムを起動するという事は、システム内に1つのプロセス(プログラムを実行する為の4GBのメモリ空間などを指す)を作成し、プロセスに実行ファイルを読み込み、プロセス内に最初に実行されるスレッドが作成される事を意味します。Main()を実行するのは、その最初のスレッドであり、Thread.Sleepを呼び出す事は自分自身を実行しているスレッドを暫くの間停止させるという事を意味します。

例えば

while (true)
;

を実行すると、CPU使用率は100%になりますが、Thread.Sleepでスレッドを眠らせている間は、そのスレッドのCPU使用率は0%になります。

Thread.Sleepを呼び出すのは、できるだけ省電力の状態で待つという事と、他のスレッドがCPUをより多く使えるようにするという意味しかありません。

わけのわからない説明になってしまったかもしれませんが、何かあれば補足下さい。
もっとも、C#は入門書を読んで実験的に3時間くらいしか使った事がないので、C#の事を聞かれても答えられないかもしれません(笑

#2です。

Thread.Sleepについて誤解があるようですね。

Thread.Sleepを使ったのは、ループ再生が確認できるだけの時間、Main()から戻りたくなかったからです。ゲームはいきなり終了する事はないわけですから、Thread.Sleepを入れる必要はありません。ボタンが押された時や、その他なんらかの条件でPlaySoundを呼び出しやればいいだけです。

PlaySoundを非同期指定で呼び出すと、内部でスレッドを作成しバックグラウンドで動作しますが、その事とThread.Sleepを使う事とは全く関係ありません。ファイルを...続きを読む

Qネイティブ ハンドルって...............

ネイティブ ハンドルってなんでしょうか?
ウィンドウ ハンドルを調べていたら出てきたのですが
調べてもわかりません
すいませんがどのようなものなのかお教え願えませんか?
よろしくお願い致します

Aベストアンサー

カテゴリ違いでは?
.NETですよね。

.NETでは、従来のウィンドウハンドルは基本的に使いません。
Windowsプラットフォームにネイティブなものだからネイティブハンドルと呼んでいるのでしょう。

Qwavの倍速再生(タイムストレッチ)

VC++でwavの倍速再生(タイムストレッチ)を行いたいと思っています。
ロジックを組むには、かなり高度な知識と技術がいるようです…。
そこで、APIの『waveOutSetPlaybackRate』を使ってみようと思いましたが、
デバイスがサポートされていなければいけないようで、実現できませんでした。
『waveOutSetPlaybackRate』の使用できるデバイスをご存知の方、
『waveOutSetPlaybackRate』のわかる方、ご教授をよろしくお願いします。

Aベストアンサー

デバイスは知らないのですが、比較的簡単に再生速度を変える方法に、OLA(Overlap-and-Add)があります。やったことはないですが音質はあまりよくないようです。
その一種であるPICOLAに関する記事です。
http://keizai.yokkaichi-u.ac.jp/~ikeda/research/picola-jp.html

QLINUXでのWAV再生・停止・一時停止について

LinuxでC言語を使ってWAVファイルの再生・停止・一時停止をしようとしています。
再生・停止は行えるのですが、一時停止後、停止したところから再生がうまくいきません。
再生した秒数(ミリ秒まで)を測って、再生し終わった秒数からバイト数を求めて、その分を前詰めして再生させようとしています。
 WAVファイルヘッダー    再生済み    未再生
├──────────┼──────┼──────┤
           ↓一時停止後再生
 WAVファイルヘッダー    未再生
├──────────┼──────┤
再生済みバイト数の求め方は
バイト数=再生時間×8÷ビット数÷サンプリングレート÷チャンネル数
で求めています。
理論上この式であっていると思うのですが、ずれてしまいます。なぜか上記バイト数を÷2するとちょうど良いぐらいになります。

よろしくお願いします。

Aベストアンサー

なんか式が違っているような。。。

1回のサンプルで必要なバイト数
=(量子化ビット数÷8)×チャンネル数

1秒で必要なバイト数
=1回のサンプルで必要なバイト数 × サンプリング周波数
=(量子化ビット数÷8)×チャンネル数 × サンプリング周波数

n秒で必要なバイト数
=1秒で必要なバイト数 × n

nミリ秒で必要なバイト数
=n秒で必要なバイト数 ÷ 1,000


だと思います。

Qwavの連続再生ってどうやるの?

WindowsでC++のプログラミングをやっています。

wavで3つの音楽ファイルを連続再生させたいのですがどうすればよいのでしょうか??

1曲を1回再生なら

PlaySound("c:\\01.wav",NULL,SND_FILENAME | SND_ASYNC | NULL );

で、できたのですが、3曲連続で再生させようとしても


PlaySound("c:\\01.wav",NULL,SND_FILENAME | SND_ASYNC | NULL );

PlaySound("c:\\02.wav",NULL,SND_FILENAME | SND_ASYNC | NULL );

PlaySound("c:\\03.wav",NULL,SND_FILENAME | SND_ASYNC | NULL );

とすると03.wavだけが再生されてしまいます。

実際全部再生されているのでしょうけど前のが全部再生されないうちに次のが再生されてしまっているのだと思います。

01.wavが1曲全部再生してから02.wavを再生させるようにするにはどうすればよいのでしょうか。

どなたかよろしくお願いします><

WindowsでC++のプログラミングをやっています。

wavで3つの音楽ファイルを連続再生させたいのですがどうすればよいのでしょうか??

1曲を1回再生なら

PlaySound("c:\\01.wav",NULL,SND_FILENAME | SND_ASYNC | NULL );

で、できたのですが、3曲連続で再生させようとしても


PlaySound("c:\\01.wav",NULL,SND_FILENAME | SND_ASYNC | NULL );

PlaySound("c:\\02.wav",NULL,SND_FILENAME | SND_ASYNC | NULL );

PlaySound("c:\\03.wav",NULL,SND_FILENAME | SND_ASYNC | NULL );

とすると...続きを読む

Aベストアンサー

PlaySound("c:\\01.wav",NULL,SND_FILENAME | SND_SYNC| NULL );
PlaySound("c:\\02.wav",NULL,SND_FILENAME | SND_SYNC| NULL );
PlaySound("c:\\03.wav",NULL,SND_FILENAME | SND_SYNC| NULL );

ただしこの場合03.wavが鳴り止むまで
制御は返ってきません。
その間、他の事をしたいなら別スレッドをたててください。


人気Q&Aランキング

おすすめ情報