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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

4433閲覧

音信号(ドレミファソラシド)を関数を用いて生成する方法について

sho_fed

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/21 08:51

編集2018/07/21 17:02

Pythonで音信号の生成、具体的には音階ドレミファソラシドを各音3秒ずつ鳴らしていくデータを作成しようとして、以下のスプリクトコードを描いてみたのですが、エラーが表示されてしまい、上手くいきません。何をどうしたらいいのかアドバイスをいただけるとありがたいです。

Python

1import numpy as np 2from scipy.io.wavfile import write 3 4def GenFreq(Fc, Fs, dur): 5 # 長さ dur 秒間,周波数 Fc[Hz] のデータを 6 # サンプリング周波数 Fs[Hz] で生成する. 7 # 正弦波関数を用いる 8 Fs = 22100. 9 Fc = 262 10 dur = 3. 11 Amp = 1.0 12 13 delta = 1. / Fs 14 Nmax = Fs * dur 15 16 t = np.arange(Nmax) * delta 17 x = Amp * np.sin(2. * np.pi * Fc * t) 18 19 20 21# 以下に GenFreq を用いて "CDEFGAB" の音階を各 dur 秒間 22# 生成するスクリプトコードを書く 23 24Fs = 22100. # サンプリング周波数 25Fc = (262, 294, 330, 349, 392, 440, 494, 523) 26dur = 3. 27 28for i in Fc: 29 y = GenFreq(i, Fs, dur) 30 31 32 33# y に音声波形を入れたものとしてファイルを保存 34fname = 'MkSnd4Test.wav' 35write(fname, Fs, y) 36

以上のスクリプトコードを実行させると、以下のようなエラーが表示されます。

Python

1--------------------------------------------------------------------------- 2AttributeError Traceback (most recent call last) 3/Users/shouri/Python18/2018pymonq2-sho-fed/ans1.py in <module>() 4 35 # y に音声波形を入れたものとしてファイルを保存 5 36 fname = 'MkSnd4Test.wav' 6---> 37 write(fname, Fs, y) 7 8/usr/local/lib/python3.6/site-packages/scipy/io/wavfile.py in write(filename, rate, data) 9 331 10 332 try: 11--> 333 dkind = data.dtype.kind 12 334 if not (dkind == 'i' or dkind == 'f' or (dkind == 'u' and 13 335 data.dtype.itemsize == 1)): 14 15AttributeError: 'NoneType' object has no attribute 'dtype'

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

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

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

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

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

y_waiwai

2018/07/21 15:18

うまくいかないとはどうなるんでしょうか
sho_fed

2018/07/21 17:03

質問を編集してみたので、お手数ですがもう一度みていただいてよろしいでしょうか?
guest

回答1

0

AttributeError: 'NoneType' object has no attribute 'dtype'

グーグル翻訳
AttributeError: 'NoneType'オブジェクトには属性 'dtype'がありません

dkind = data.dtype.kind

1, data.dtype.kindこの行のdataNoneということです。

2, 次に渡される引数を確認します。
scipy.io.wavfile.write

Python

1write(fname, Fs, y) # y = data

3, 質問文のコードの中で変数:yに値を代入しているのは以下の行です。

Python

1y = GenFreq(i, Fs, dur)

4, GenFreq関数を確認します。
Return文がありません。
Return文が無い時、デフォルト値として値:Noneが返されます。

◇結論
GenFreq関数の最終行にReturn xを追加すればよいのではないでしょうか。

投稿2018/07/21 21:36

編集2018/07/21 21:39
umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問