/ Dev / snd / এ মজাদার জন্য এলোমেলো শব্দ উত্পন্ন করা হচ্ছে


41

সম্প্রতি আমি মন্ত্রযুক্ত / দেব ফোল্ডারটি অন্বেষণ করছি l আমি কিছু শব্দ উত্পন্ন করতে কোনও অডিও ডিভাইসে কিছু এলোমেলো ডেটা লিখতে চাই।

আমি ALSA ব্যবহার করছি।

সুতরাং আমি বিড়ালকে / dev ফোল্ডারে প্লেব্যাক ফাইলে কিছু এলোমেলো তথ্য পাইপ করার নির্দেশ দিয়েছি ...

 cat file-of-random-data > /dev/snd/pcmC0D0p

তারপরে আমি বিড়াল থেকে ত্রুটি বলে মনে করি তা গ্রহণ করি

 cat: write error: File descriptor in bad state

আমি কীভাবে এটি ঠিক করতে পারি যাতে আমি আমার সাউন্ড কার্ড থেকে কিছু সুস্বাদু স্ট্যাটিক খেলা শুনতে পারি?


1
আমি মনে করি আপনাকে এলোমেলো পিসিএম ডেটা প্রেরণ করতে হবে , অথবা আপনাকে প্রথমে কয়েকটি আইওএসটিএল দিয়ে ডিভাইসটি সেটআপ করতে হবে - আপনি কেবল এলোমেলো বাইটগুলি ডাম্প করতে পারবেন না।
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলিস উইকিপিডিয়া অনুসারে, .wav হ'ল পিসিএম এবং র্যান্ডম ফাইলটিকে একটি .wav ফাইলের সাথে প্রতিস্থাপন করার সময় আমি ঠিক একই ফলাফল পাই। আমি কিছু ইন / আউট নিয়ন্ত্রণ স্থাপনের বিষয়ে তদন্ত করব will
জোনস

কারও কাছে কীভাবে কিছু আইওএসটিএল সেটআপ করতে হয় তার টিউটোরিয়ালটির জন্য পয়েন্টার রয়েছে? আইওসিটিএলএস নামের কোনও কিছুর জন্য, আমি ভেবেছিলাম একটি এপিআই হিসাবে ALSA এর ইনপুট এবং আউটপুটটির জন্য ইন্টারফেস সরবরাহ করা উচিত?
জোন্স

ডিভাইস ফাইলে সরাসরি পিসিএম
ইগোর লাইফরেঙ্কো

উত্তর:


46

আমি মনে করি এটি আপনার পক্ষে কাজ করছে না কারণ কারণ ইন্টারফেসটি হ্রাস করা হয়েছে। আপনি সাধারণত /dev/dspআর অডিও ব্যবহার করে লিখতে পারবেন না, কমপক্ষে কৌশলযুক্ত না হয়ে।

একটা প্রোগ্রাম যা আপনার সিস্টেমে আপনার জন্য এই কাজ করা সম্ভব হবে: padsp। এটি নতুন অডিও সার্ভার সিস্টেমে /dev/audioবা /dev/dspফাইলটি ম্যাপ করবে ।

টার্মিনালটি ফায়ার করুন এবং এর সাথে রুট মোডে প্রবেশ করুন sudo su

তারপরে, আমি cat /dev/urandomআউটপুটটিতে যাচ্ছি এবং পাইপ করছি এবং ডেটা প্রেরণে কমান্ডটি padspব্যবহার করব । আপনি আপনার টার্মিনালে একটি টন আবর্জনা পাবেন, যাতে আপনি পুনর্নির্দেশ করতে চাইতে পারেন ।tee/dev/audio/dev/null

একবার আপনি সুপারউজারে পরে, এই আদেশটি ব্যবহার করে দেখুন:

cat /dev/urandom | padsp tee /dev/audio > /dev/null

আপনি নিজের মাউসের মতো অন্যান্য ডিভাইসগুলি ব্যবহার /dev/psauxকরে দেখতেও পারেন : উদাহরণস্বরূপ বা ইউএসবি ড্রাইভার Use এমনকি আপনি এর মাধ্যমে আপনার স্মৃতি চালাতে পারেন: /dev/mem

আশা করি এটি পরিষ্কার হয়ে গেছে কেন এটি আগে কাজ করছে না।

ব্যক্তিগতভাবে, আমি মাউস এবং মেমরিটিকে এলোমেলো স্ট্যাটিক খেলার চেয়ে আরও আকর্ষণীয় বলে মনে করেছি!


1
অনেক ধন্যবাদ! এই আমি খুঁজছিলাম ছিল। প্রশ্ন পোস্ট করার পরে পুরো 7 মাসের উত্তর! :-)
জোনস

3
দেখে মনে হচ্ছে এটির sudoজন্য বিশেষাধিকারের প্রয়োজন নেই।
আইরিন

2
অনেক ধন্যবাদ. আমি বাইনারিগুলি অদ্ভুতভাবে আকর্ষণীয় বলে মনে করেছি। / ইউএসআর / বিন / এলএস / ইউএসআর / বিন / জিনোম-টার্মিনাল / ইউএসআর / বিন / মাইএসকিএল
bright:

হুম, আশ্চর্যজনক, 'টি' এটি করতে পারে তবে 'ডিডি অফ = / দেব / অডিও' পারে না।
জেসেন

@ জেসেন ডিডি একসাথে খুব বেশি লিখতে পারে। আল্পার মাধ্যমে এটিকে পুনর্নির্দেশ করতে প্যাডস্প সিমুলেট করে / দেব / অডিও। প্যাডস্প ব্যতীত ডিডি এমনকি কার্নেল ওএসএস এমুলেশন সক্ষম না করা (এবং ডিফল্টরূপে এটি হয় না) অবধি / dev / অডিও দেখতে পাবে না। এবং আমি মনে করি যে ড্রাইভার-বাফারগুলির চেয়ে অনেক বড় একটি বৃহত ব্লক লিখতে ব্যর্থ হতে পারে।
পল স্টেলিয়ান

8

cat /dev/urandom | aplay টাইপ করা প্রয়োজন যে কমান্ড। আপনি যদি "অডিও" গোষ্ঠীতে না থাকেন তবে আপনি sudo এর সাথে অ্যাপ্লে উপসর্গ করতে পারেন। এটি কোনও ডিমনগুলিতেও হস্তক্ষেপ করে না ( pulseaudioএই কমান্ডটি সক্রিয় থাকাকালীন আমি চলছিলাম এবং সঠিকভাবে "শব্দ" শুনেছিলাম) heard

সম্পাদনা করুন (আগস্ট 6, 2019): কমান্ডের একটি পুরোনো সংস্করণ আমি একটি ছিল padsp teeমধ্যে জিনিস catএবং aplay। এখন যেহেতু আমি আসলে মাঠে কাজ করছি তা বুঝতে পেরেছি যে এটি একেবারেই অর্থবহ নয়। এছাড়াও, আমি জানি আপডেটেড কমান্ড (এই উত্তরটির শুরুতে এখন একটি দৃশ্যমান) কাজ করে কারণ আমি দিনে দিনে বেশ কয়েকবার এটি ব্যবহার করি।


6
আমি ALSA ব্যবহার করি এবং "প্যাডস্প টি" প্রয়োজন হয় না।
জেরেমিয়া

1
আমার পালসওডিও অভিজ্ঞতায় (এবং পিএ ডাউন করার সময় উবুন্টু যা ব্যবহার করছে) যা padsp teeপ্রয়োজন ছিল (সেই সময়টিতে আমার সুনির্দিষ্ট १२.০৪.২ ছিল) জিনিসটি হ'ল আপনি সরাসরি ডিভাইসগুলিতে ডেটা ফেলে দেওয়ার চেষ্টা করবেন না, এমনকি আপনি রুট থাকলেও ( যতদূর আমি জানি যে কয়েকটি ফাইল পঠনযোগ্য এবং / ডি ফোল্ডারে কোনও লিখিতযোগ্য নয়, কারণ আপনি হয় ত্রুটি পেতে পারেন (সর্বোত্তম ক্ষেত্রে, যা প্রতিটি আপডেটের সাথে আরও সাধারণ হয়ে যায়), কার্নেলটি ক্র্যাশ করতে পারে বা এমনকি ডিভাইসটি ভেঙে দেয়, বিরল ক্ষেত্রে। এটি করার জন্য কাউকে অ্যাপ্লাইয়ের মতো অপ্রয়োজনীয় উপাদান ব্যবহার করা উচিত (দুর্ভাগ্যক্রমে অডিও গ্রুপ বা মূল প্রয়োজন)। @ জেরেমিয়া
পল

মজার বিষয় এখন কীভাবে আমি দেখছি যে padsp teeজিনিসটি আসলে সমস্ত কিছুতেই কোনও অর্থ বোধ করে না। কাজের সময় আমি অডিও ড্রাইভার লেখার মাধ্যমে অগ্রগতি করছি কিনা তা পরীক্ষা করতে that লাইন ছাড়াই অনুরূপ কিছু ব্যবহার করি। এখন আমার উত্তর আপডেট করবে।
পল স্টেলিয়ান

3

/ Dev / snd এর অধীনে / dev / অডিও বা অন্য কোনও একটি ডিভাইস চেষ্টা করুন। এগুলির সমস্তই অডিও ডেটা ডুবে নয়, আপনি হয়ত একটি মিশ্রক, মাইক্রোফোন বা কোনও কিছু পেয়েছেন


1
উত্তর দেওয়ার জন্য ধন্যবাদ. / প্রোক / অ্যাসাউন্ড / ডিভাইসগুলি / দেব / এসএনডি / পিসিএমসিডিডিপিপি অনুসারে অডিও প্লেব্যাকের জন্য সঠিক ডিভাইস (অতএব 'পি')
জোন্স

1
এছাড়াও, আমি নিশ্চিত নই, তবে প্লেব্যাকের জন্য কি একাধিক দেব "ফাইল" থাকতে পারে? আমি না আছে একটি 'আপনার / dev / অডিও' আমি মনে করি '/ dev এর / অডিও' যা (2.5 আগে) পুরোনো কার্নেলের উপর ব্যবহার করা হয় OSS সঙ্গে কি কিছু আছে
জোনস

2

একটি শব্দ ডিমন (উদাহরণস্বরূপ pulseaudio) ডিভাইসে লক ধরে আছে? আমি মনে করি আপনি এর মাধ্যমে অন্য কোনও কিছুর হাতল আছে কিনা তা আপনি জানতে পারবেন lsof


1
সহায়ক পরামর্শের জন্য ধন্যবাদ। আমার একটি চেক ছিল, ব্যবহার grepএবং lsofpulseaudioব্যবহার করছে /dev/snd/controlC0তবে তা চালু নেই /dev/snd/pcmC0D0p/var/lockডিভাইসে লক দেওয়ার জন্য কোনও ফাইল আছে কিনা তা অনুসন্ধান করতে গিয়ে আমার ডাবল চেক হয়েছিল । ls -alফোল্ডারটি খালি রয়েছে তা বলে। তাই আমি অনুমান সেখানে pcmC0D0p কোন লক হয়
জোনস

@ জোন্স নিয়ন্ত্রণে লক ধরে রাখা চালকের উপর নির্ভর করে পুরো কার্ডটি লক করার জন্য যথেষ্ট। (8 বছর পরে উত্তর দেওয়ার জন্য দুঃখিত, এখন আমি নিজেই শিখেছি)
পল স্টেলিয়ান

0

টিএল; ডিআর: ডিভাইসটির প্যারামিটারগুলি এতে ডেটা পড়তে বা লেখার আগে সেট করতে হবে।

ধাপে ধাপে:

  1. পিসিএম ডিভাইসটি খুলুন। উদাহরণ: fd = open("/dev/snd/pcmC0D0p", O_RDWR)। খোলার পরে, পিসিএম OPENঅবস্থায় রয়েছে।

  2. সঙ্গে পরামিতি সেট করুন ioctl(fd, SNDRV_PCM_IOCTL_HW_PARAMS, (struct snd_pcm_hw_params*) p)। হার্ডওয়্যার প্যারামিটার কাঠামোর মুখোশ রয়েছে (প্রতিটি বিট একটি মান) এবং অন্তরগুলি ([সর্বনিম্ন, সর্বাধিক] সীমা)। যে প্যারামিটারগুলি সেট করা হচ্ছে না তা অবশ্যই পূরণ করতে হবে (সমস্ত বিট / মুখোশের জন্য মান সেট করা; অন্তরগুলির জন্য সম্পূর্ণ পরিসীমা)। হার্ডওয়্যার প্যারামিটার সেট করার পরে, পিসিএম SETUPঅবস্থায় রয়েছে। কোডের জন্য টিনিএলএসএর পিএমসি_সেট_কনফিগ () দেখুন ।

    সেট ACCESS, FORMAT, RATE, CHANNELS, PERIOD_SIZEএবং PERIODSযথেষ্ট। অন্যান্য প্যারামিটারগুলি এর রূপসমূহ, BUFFER_SIZEকিছু ডিভাইস বাদে এটির একাধিককে সেট করা যেতে পারে PERIOD_SIZE

  3. ioctl(fd, SNDRV_PCM_IOCTL_PREPARE)ডিভাইস এবং ALSA রানটাইম ভেরিয়েবল প্রস্তুত করার জন্য কল করুন । এরপরে পিসিএম PREPAREDঅবস্থায় রয়েছে।

  4. পড়া (ক্যাপচার) বা লেখা (প্লেব্যাক) শুরু করুন।

পিসিএম ডিভাইসে পড়তে বা লেখার জন্য একটি সর্বনিম্ন অ্যাপ্লিকেশনটিতে তার বেশিরভাগ কোড হার্ডওয়্যার পরামিতি হেরফেরগুলির চারপাশে থাকবে।


আমি নিশ্চিত নই যে প্রকৃত পঠন / লেখার কাজ, যেমন অ্যাপ্লে ব্যবহার করে (কমপক্ষে আমি যে সিস্টেমে বিকাশ করছি সেটিতে) আইওসিটিএল (এফডি, এসএনডিআরভিএপসিএম_আইওসিটিএল_ডাব্লাইআরআই, ফ্রেমস, ...) এবং প্লেব্যাকে প্রকৃত লিখন () কল নয়। ALSA এর নিজেই কি এমন একটি মোড়ক রয়েছে যা পঠন / লেখার প্রবেশের পয়েন্টগুলিকে নিয়ে যায় এবং সেগুলিকে ioctl এ অনুবাদ করে?
পল স্টেলিয়ান

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