পাইথন [বন্ধ] ব্যবহার করে কীভাবে একটি স্থির ফ্রিকোয়েন্সি সাউন্ড প্লে করতে হয়


8

আমি একটি স্থির ফ্রিকোয়েন্সি শব্দ বাজানোর বেশ কয়েকটি উপায় চেষ্টা করেছি (উদাঃ 1000Hz) এবং কিছুই কার্যকর হয় না।

আমি "বীপ" ডাউনলোড করেছি এবং এতে কোনও শব্দ হয় না।

আমি পিয়াওতে ইন্টারফ্যাক্স করার চেষ্টা করেছি এবং এর কোনও প্রভাব নেই।

আমি অডিয়ারে ইন্টারফেস করার চেষ্টা করেছি এবং লাইব্রেরিটি সফ্টওয়্যার কেন্দ্র থেকে ইনস্টল করা সত্ত্বেও গ্রন্থাগারটি খুঁজে পাওয়া যায় না এমন ইঙ্গিত করে একটি রানটাইম ত্রুটি পেয়েছি।

উপযুক্ত গ্রন্থাগার এবং প্রাসঙ্গিক কোড স্থাপনের জন্য যে কোনও গাইডেন্স সবচেয়ে প্রশংসিত হবে।

আমি এটির জন্য .mp3 / .wav ফাইলগুলি তৈরি করতে পারি না, তবে রান সময় টোন উত্পন্ন করতে হবে।

আপনার জন্য অনেক ধন্যবাদ


আপনার ওয়েভটি ভাসমান করা দরকার। কেন এফআরইকিউ বলবেন না? এছাড়াও সমীকরণটি ঠিক নয়। এটি চেষ্টা করুন: গণিত.সিন ((x * 2 * math.pi * FREQ) / রেট) * 127) +128

আরও ভাল বাস্তবায়ন এখানে পাওয়া যাবে: stackoverflow.com/questions/974071/…
Gringo Suave

উত্তর:


10
import math
#sudo apt-get install python-pyaudio
from pyaudio import PyAudio

#See http://en.wikipedia.org/wiki/Bit_rate#Audio
BITRATE = 16000 #number of frames per second/frameset.      

#See http://www.phy.mtu.edu/~suits/notefreqs.html
FREQUENCY = 261.63 #Hz, waves per second, 261.63=C4-note.
LENGTH = 1.2232 #seconds to play sound

NUMBEROFFRAMES = int(BITRATE * LENGTH)
RESTFRAMES = NUMBEROFFRAMES % BITRATE
WAVEDATA = ''    

for x in xrange(NUMBEROFFRAMES):
   WAVEDATA += chr(int(math.sin(x / ((BITRATE / FREQUENCY) / math.pi)) * 127 + 128))    

#fill remainder of frameset with silence
for x in xrange(RESTFRAMES): 
    WAVEDATA += chr(128)

p = PyAudio()
stream = p.open(
    format=p.get_format_from_width(1),
    channels=1,
    rate=BITRATE,
    output=True,
    )
stream.write(WAVEDATA)
stream.stop_stream()
stream.close()
p.terminate()

2
এটি হওয়া উচিত(2*math.pi)
jfs

এটি সঠিকভাবে কাজ করতে আমার ভবিষ্যতের বিভাগ এবং 2 * গণিত * পাই থাকতে হয়েছিল। পাইথন 2.8 32 বিট
চিবি

পাইথন ২.7 এটিকে একটি "মসৃণ" শব্দ হিসাবে অভিনয় করে যেখানে পাইথন ৩.৪ অনেকগুলি "বুজিয়ার" শব্দ উত্পাদন করে। কেন? আমি ____ ফিউচার ____ বিভাগ যুক্ত করার চেষ্টা করেছি, তবে এতে কোনও পার্থক্য হয়নি।
উবুনটুরিস্ট

@ উবুনটুরিস্ট আমি নিশ্চিত নই, তবে আমি মনে করি যে আপনার পাইথন ২. 2. একটি 8-বিট এনকোডিং এবং আপনার পাইথন 3.4 ইউটিএফ 8 ব্যবহার করে, তাই char()পাইথন 3.4-তে কিছু মানের জন্য 2 বাইট ব্যবহার করুন যা আমরা এখানে চাই না।
12431234123412341234123

আপনি যদি পাইথন 3 এর স্টার স্ট্রিংয়ের পরিবর্তে বাইটস্ট্রিংগুলি ব্যবহার করেন তবে আপনার পছন্দসই প্রভাবটি পাওয়া উচিত
pizzapants 184

4

আপনি এটি দিয়ে করতে পারেন python-pyaudio(কমপক্ষে 12.04 এ উপলব্ধ):

from __future__ import division #Avoid division problems in Python 2
import math
import pyaudio
import sys

PyAudio = pyaudio.PyAudio
RATE = 16000
WAVE = 1000
data = ''.join([chr(int(math.sin(x/((RATE/WAVE)/math.pi))*127+128)) for x in xrange(RATE)])
p = PyAudio()

stream = p.open(format =
                p.get_format_from_width(1),
                channels = 1,
                rate = RATE,
                output = True)
for DISCARD in xrange(5):
    stream.write(data)
stream.stop_stream()
stream.close()
p.terminate()

আপনার সাহায্যের জন্য ধন্যবাদ। দুর্ভাগ্যক্রমে, চলমান অবস্থায় আমি প্রচুর ত্রুটি পেয়েছি এবং রেটে বা ওয়েভের কোনও পরিবর্তন করার ফলে কোনও শব্দই আসে না। জায়গার অভাবে ত্রুটিগুলি তালিকাভুক্ত নয় তবে "ALSA lib" দেখুন। আমি কীভাবে একটি পরিবর্তন করব) ত্রুটিগুলি দূর করতে এবং খ) সময়কাল এবং ফ্রিকোয়েন্সি পরিবর্তন করতে? অনেক ধন্যবাদ,
user98415

আমি একগুচ্ছ ত্রুটি বার্তাগুলিও পাই, তবে এটি খুব ভাল খেলে। এছাড়াও, ওয়েভ পরিবর্তন করা আমাকে বিভিন্ন পিচ দেয়। আপনি কি জ্যাক ব্যবহার করছেন? নাকি শুধু পালসওদিও?
ট্যানেলি

2
@ ব্যবহারকারী98415: from __future__ import divisionপাইথন ২ এ অপ্রয়োজনীয়
কাটা

@ জেফাসেবাস্টিয়ান যা আমার জন্য সমস্ত কিছু সমাধান করেছে, আপনাকে ধন্যবাদ
চিভি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.