質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

826閲覧

Linuxのexeclの使い方について

YOshim

総合スコア1085

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/10/31 02:19

編集2018/10/31 02:24

Linuxで音声出力を試みています。
任意のRAWデータをaplayコマンドで音声出力させたいです。

以下の記述で、systemコマンドで音声を出力する事はできました。

#include <stdio.h> #include <stdlib.h> #include <math.h> #define DATASIZE 10000 int main(){ double smp_freq = 16000; double freq = 880; double sec; FILE *fp; fp = fopen("waveRAW.raw","w"); char waveData[DATASIZE]; sec = 1/smp_freq; for(int i=0;i<DATASIZE;i++){ waveData[i] = 100 * sin(2*3.14159*freq*sec*i) + 100; fputc(waveData[i],fp); } char *waveOut = "aplay -traw waveRAW.raw"; system(waveOut); }

が、Linuxのプログラム本を読むとsystemはシェルを立ち上げるので遅いよという記載があり、
execlで記述しようと試みましたがうまくいきません。
以下を削除し

char *waveOut = "aplay waveRAW.raw"; system(waveOut);

以下を追記しました。

execl("aplay", "aplay", "waveRAW.raw",NULL);

恐らくexeclについて理解が不足しているのだと思いますが、
コメント頂ければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2018/10/31 02:28

「うまくいきません」を具体的に記載してください。エラーが出るとか動作がこうなってしまうとか
YOshim

2018/10/31 02:32

"うまくいきません"というのは、エラーも出ず、音声が出力されないという状態でした。先ほど自己解決致しました。お手数お掛けして申し訳ありません。
guest

回答1

0

自己解決

解決しました。
execlをexeclpに変更すればせいじょうに動作しました。
execlを使用する場合は、aplayのパスを正確に記載する必要があったようです。
execlpであればプログラム名から場所を探して実行してくれました。

投稿2018/10/31 02:31

YOshim

総合スコア1085

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問