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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

2回答

3595閲覧

Pythonで編集したwavファイルを書き出すことができない。

Uta_fai

総合スコア18

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/11/04 06:01

前提・実現したいこと

pythonによって編集したwavファイルを指定したフォルダに書き出したい。

発生している問題・エラーメッセージ

C:\Users\bluej\Anaconda3\lib\site-packages\ipykernel_launcher.py:43: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead --------------------------------------------------------------------------- PermissionError Traceback (most recent call last) <ipython-input-137-0da17bdc14a7> in <module>() 78 dangry=os.path.join(label,'angry/') 79 print(dangry) ---> 80 division (angry,angryl,dangry) <ipython-input-137-0da17bdc14a7> in division(bb, base_dir, opath) 67 outd = struct.pack("h" * len(Y), *Y) 68 #writeaudio(ch,width,frr,outd,opath) ---> 69 ww = wave.open(opath,'w') 70 ww.setnchannels(ch) 71 ww.setsampwidth(width) ~\Anaconda3\lib\wave.py in open(f, mode) 510 return Wave_read(f) 511 elif mode in ('w', 'wb'): --> 512 return Wave_write(f) 513 else: 514 raise Error("mode must be 'r', 'rb', 'w', or 'wb'") ~\Anaconda3\lib\wave.py in __init__(self, f) 303 self._i_opened_the_file = None 304 if isinstance(f, str): --> 305 f = builtins.open(f, 'wb') 306 self._i_opened_the_file = f 307 try: PermissionError: [Errno 13] Permission denied: './diva/angry/'

#ソースコード

import wave import struct from scipy import fromstring, int16 import os path='./' angry=os.path.join(path,'angry') angryl = os.listdir(angry) happy=os.path.join(path,'happy') happyl = os.listdir(happy) normal = os.path.join(path,'normal') normall= os.listdir(normal) def tt(fr,fn): #音源のながさ return 1.0*(fr)/(fn) def calcfr(time,ch,frr): #フレーム数の計算 return int(time*ch*frr) def writeaudio(ch,wd,fr,outd,outp):#ファイルの書き出し ww = wave.open(outp,'w') ww.setnchannels(ch) ww.setsampwidth(width) ww.setframerate(fr) ww.writeframes(outd) ww.close() def division (bb,base_dir,opath): for dir in base_dir: start=0 end=0 apath=os.path.join(bb,dir) #path拾いつつ初期化 wr = wave.open(apath, 'r') width= wr.getsampwidth() ch=wr.getnchannels() frr= wr.getframerate() frn = wr.getnframes() data=wr.readframes(wr.getnframes()) wr.close() X=fromstring(data,dtype=int16) alt=tt(frr,frn) num = int(alt/3) for i in range (num): start = 3 * i end = start + 3 outf='dir'+'i'+'.wav' Y=X[calcfr(start,ch,frr):calcfr(end,ch,frr)] outd=struct.pack("h"*len(Y)*Y) # writeaudio(ch,width,frr,outd,opath) ww = wave.open(opath,'w') ww.setnchannels(ch) ww.setsampwidth(width) ww.setframerate(frr) ww.writeframes(outd) ww.close() if alt%3 > 0: start = alt-3 end = alt outf='dir'+'i'+'.wav' Y=X[calcfr(start,ch,frr):calcfr(end,ch,frr)] outd = struct.pack("h" * len(Y), *Y) #writeaudio(ch,width,frr,outd,opath) ww = wave.open(opath,'w') ww.setnchannels(ch) ww.setsampwidth(width) ww.setframerate(frr) ww.writeframes(outd) ww.close() label=os.path.join(path,'diva/') dangry=os.path.join(label,'angry/') print(dangry) division (angry,angryl,dangry)

試したこと

関数を利用せずに、実装を試みた。
保存するフォルダを変えた。
python.exeの許可において読み取り専用の部分を外した。
指定したフォルダの読み取り専用の部分を外した

補足情報(FW/ツールのバージョンなど)

wavファイルを3秒ごとに分割するプログラムですが、permission deniedによって保存できません。
環境はWindows10で、anacondaの最新バージョンを使用し、jupyterによってソースコードを編集
しています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ww = wave.open(opath,'w')opath./diva/angry/であり、ディレクトリをファイルとして開こうとしているため提示エラーが発生しています。
コード詳細は確認できていませんがopathoutfの誤字かもしれません。
しかし'outf'もdiri.wavなので何かおかしいです(dir1.wavを意図している?)。
結論としては書き込みファイルパスの作成部分に問題があると思われます。

投稿2018/11/04 06:20

編集2018/11/04 06:26
can110

総合スコア38266

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

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

Uta_fai

2018/11/04 06:34 編集

ありがとうございます。ご指摘いただいた通りのミスでした解決しました。
guest

0

管理者権限が足りていなさそう.
Anaconda Navigator経由かConsole経由か分かりませんが管理者実行した上でJupyterを開いてみて下さい

投稿2018/11/04 06:18

npkk

総合スコア58

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問