در این مطلب، ویدئو کدنویسی سینت با قابلیت Wavetable با پایتون در 6 دقیقه آموزش [Synth #002] با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:18:47
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,080 –> 00:00:02,879
بیایید یک سینت سایزر جدول موج در
2
00:00:02,879 –> 00:00:04,930
پایتون
3
00:00:04,930 –> 00:00:06,319
[موسیقی]
4
00:00:06,319 –> 00:00:08,160
5
00:00:08,160 –> 00:00:10,639
بنویسیم سلام به همه این jan view از thewolfson.com است و در این ویدیو شما می
6
00:00:10,639 –> 00:00:12,480
خواهید یاد بگیرید که چگونه سنتز جدول موج را در پایتون پیاده سازی کنید
7
00:00:12,480 –> 00:00:15,519
اگر
8
00:00:15,519 –> 00:00:18,080
نمی دانید سنتز جدول موج
9
00:00:18,080 –> 00:00:20,240
چیست. به شدت شما را تشویق می کنیم که
10
00:00:20,240 –> 00:00:22,400
ویدیوی قبلی من در مورد موج t با
11
00:00:22,400 –> 00:00:24,400
تئوری سنتز را در این ویدیو مشاهده کنید، ما می خواهیم این را
12
00:00:24,400 –> 00:00:27,279
صرفاً در پایتون پیاده سازی کنیم و
13
00:00:27,279 –> 00:00:29,439
پایتون تنها چیزی است
14
00:00:29,439 –> 00:00:32,000
که برای این ویدیو باید داشته باشید، بنابراین بدون هیچ
15
00:00:32,000 –> 00:00:34,880
مقدمه ای بیایید شروع کنیم خوب من اینجا هستم. در
16
00:00:34,880 –> 00:00:37,040
کد ویژوال استودیو و من فقط یک
17
00:00:37,040 –> 00:00:38,960
فایل منبع منفرد را
18
00:00:38,960 –> 00:00:40,879
در ابتدا ایجاد می کنم، تمام بسته های لازم را وارد می کنم،
19
00:00:40,879 –> 00:00:43,120
بنابراین آنچه که ما نیاز داریم
20
00:00:43,120 –> 00:00:45,600
فقط numpy است
21
00:00:45,600 –> 00:00:47,200
و دومین چیزی که نیاز داریم
22
00:00:47,200 –> 00:00:49,600
چیزی است که شکل موج های تولید شده خود را در آن ذخیره کنیم
23
00:00:49,600 –> 00:00:52,480
و اکنون برای آن من از
24
00:00:52,480 –> 00:00:56,000
فایل موجی عملیات خواندن نوشتن از
25
00:00:56,000 –> 00:00:59,000
scipy استفاده خواهد کرد،
26
00:00:59,359 –> 00:01:01,600
خوب حالا ما آماده هستیم تا تابع اصلی خود را بنویسیم
27
00:01:01,600 –> 00:01:04,079
28
00:01:06,560 –> 00:01:08,560
ابتدا پارامترهایی را که برای پردازش استفاده خواهیم کرد تعریف کنیم،
29
00:01:08,560 –> 00:01:10,880
بنابراین از
30
00:01:10,880 –> 00:01:14,720
نرخ نمونه برداری 44 100 نمونه استفاده می کنیم. در ثانیه
31
00:01:14,720 –> 00:01:17,119
32
00:01:17,840 –> 00:01:22,720
ما یک شکل موج در 440 هرتز تولید
33
00:01:22,720 –> 00:01:26,080
خواهیم کرد بنابراین فرکانس ما 440 است.
34
00:01:26,080 –> 00:01:28,000
ما می خواهیم سه ثانیه
35
00:01:28,000 –> 00:01:29,680
صدا تولید کنیم
36
00:01:29,680 –> 00:01:31,600
و شکل موجی که می خواهیم ایجاد کنیم
37
00:01:31,600 –> 00:01:34,640
یک شکل موج سینوسی است.
38
00:01:34,720 –> 00:01:37,200
39
00:01:37,200 –> 00:01:40,320
40
00:01:40,320 –> 00:01:43,360
برای آن من به طول جدول موج نیاز
41
00:01:43,360 –> 00:01:45,759
42
00:01:46,240 –> 00:01:47,759
دارم زمانی که طول دارم اکنون می توانم
43
00:01:47,759 –> 00:01:51,040
جدول موج را اختصاص
44
00:01:53,200 –> 00:01:55,040
دهم همانطور که می بینید این جدول موج اکنون
45
00:01:55,040 –> 00:01:57,200
با صفر پر شده است و ما می خواهیم آن را
46
00:01:57,200 –> 00:02:00,000
با مقادیر جدول موج پر کنیم می دانیم که
47
00:02:00,000 –> 00:02:03,280
دوره شکل موج سینوسی 2 پیکسل است، بنابراین
48
00:02:03,280 –> 00:02:06,880
من از 0 به 2 پی
49
00:02:06,880 –> 00:02:08,878
در مراحل خطی
50
00:02:08,878 –> 00:02:12,160
میروم و علامت را برای هر مرحله محاسبه
51
00:02:12,160 –> 00:02:14,480
میکنم، اجازه دهید به شما نشان دهم که چگونه این هجوم
52
00:02:14,480 –> 00:02:16,800
بر آرگومان یک نقطه از یک علامت
53
00:02:16,800 –> 00:02:18,879
خوب به نظر میرسد، بنابراین روی نمونهها تکرار میکنیم
54
00:02:18,879 –> 00:02:21,879
55
00:02:22,080 –> 00:02:25,120
و برای هر نمونه مقداری از
56
00:02:25,120 –> 00:02:29,200
دوره تخصیص داده شده را به جدول موج نسبت
57
00:02:33,519 –> 00:02:35,599
می دهیم، بنابراین همانطور که می
58
00:02:35,599 –> 00:02:37,599
بینید فرض می کنیم دوره
59
00:02:37,599 –> 00:02:39,680
شکل موج ما 2 pi است
60
00:02:39,680 –> 00:02:41,519
و
61
00:02:41,519 –> 00:02:46,319
سپس گام به گام از 0 به 2 پی می رویم و n
62
00:02:46,319 –> 00:02:49,760
طول جدول موج را می دهیم.
63
00:02:49,760 –> 00:02:52,959
نسبت ما چقدر است آیا در این دوره
64
00:02:52,959 –> 00:02:56,160
خوب است، ما جدول موج خود را داریم اکنون میتوانیم
65
00:02:56,160 –> 00:02:58,400
سعی کنیم کد را برای حلقه روی
66
00:02:58,400 –> 00:03:01,280
آن پیادهسازی کنیم، برای این ما به نوعی بافر خروجی نیاز داریم،
67
00:03:01,280 –> 00:03:04,239
بنابراین دوباره یک آرایه در
68
00:03:04,239 –> 00:03:07,040
حافظه که با نمونههای تولید شده پر میشود
69
00:03:07,040 –> 00:03:09,760
و بعداً صادر میکنیم. به یک
70
00:03:09,760 –> 00:03:12,400
فایل صوتی
71
00:03:15,280 –> 00:03:18,239
همانطور که می بینید از آنجایی که ما می خواهیم
72
00:03:18,239 –> 00:03:20,560
سه ثانیه صدا تولید کنیم و
73
00:03:20,560 –> 00:03:23,120
نرخ نمونه ما 44
74
00:03:23,120 –> 00:03:26,159
و 100 هرتز است، بنابراین این تعداد نمونه
75
00:03:26,159 –> 00:03:28,000
در ثانیه فقط باید
76
00:03:28,000 –> 00:03:30,239
این مقادیر را ضرب کنیم و این به
77
00:03:30,239 –> 00:03:32,640
تعداد نمونه های مورد نیاز ما خواهد رسید. برای تولید خوب،
78
00:03:32,640 –> 00:03:35,920
بیایید شاخص خود را تعریف کنیم و
79
00:03:35,920 –> 00:03:38,640
شاخص دقیقاً همان شاخصی در جدول موج است
80
00:03:38,640 –> 00:03:42,560
که پس از تولید هر نمونه، آن را افزایش می دهیم
81
00:03:42,560 –> 00:03:43,680
82
00:03:43,680 –> 00:03:47,120
و این شاخص ممکن است یک عدد صحیح نباشد،
83
00:03:47,120 –> 00:03:49,120
بنابراین باید
84
00:03:49,120 –> 00:03:50,959
نحوه رساندن
85
00:03:50,959 –> 00:03:54,959
این مقدار شاخص به برخی از خروجی ها را بررسی کنیم.
86
00:03:54,959 –> 00:03:58,000
مقادیر جدول موج برای شاخص های اعداد صحیح اجازه دهید به
87
00:03:58,000 –> 00:04:01,840
شما نشان دهم که چگونه در کد به نظر می رسد
88
00:04:02,159 –> 00:04:04,560
شاخص ما در ابتدا صفر است،
89
00:04:04,560 –> 00:04:06,319
سپس باید افزایش شاخص را محاسبه کنیم
90
00:04:06,319 –> 00:04:08,879
91
00:04:10,080 –> 00:04:12,799
و همانطور که از مقاله به یاد دارید
92
00:04:12,799 –> 00:04:16,238
f برابر l بر fs است که به معنای فرکانس
93
00:04:16,238 –> 00:04:18,478
بار th است. طول جدول موج e بیش از
94
00:04:18,478 –> 00:04:21,279
نرخ نمونهبرداری
95
00:04:23,360 –> 00:04:28,120
که اکنون آماده تولید نمونههای خود هستیم،
96
00:04:29,360 –> 00:04:31,759
بیایید با
97
00:04:31,759 –> 00:04:34,800
سادهترین استراتژی کوتاه کردن شاخص خود به نزدیکترین
98
00:04:34,800 –> 00:04:38,000
عدد صحیح که بزرگتر از شاخص
99
00:04:38,000 –> 00:04:39,840
ما نباشد، شروع کنیم، بنابراین
100
00:04:39,840 –> 00:04:43,919
خروجی n داشته
101
00:04:43,919 –> 00:04:46,960
باشیم که جدول موج خود را به
102
00:04:46,960 –> 00:04:49,199
103
00:04:50,000 –> 00:04:51,280
عدد صحیح
104
00:04:51,280 –> 00:04:52,240
105
00:04:52,240 –> 00:04:54,960
طبقه اختصاص دهیم.
106
00:04:54,960 –> 00:04:57,840
ایندکس ما را کوتاه میکند،
107
00:04:57,840 –> 00:04:59,199
سپس
108
00:04:59,199 –> 00:05:01,600
آن را به یک عدد صحیح تبدیل میکند و
109
00:05:01,600 –> 00:05:04,639
سپس مقدار مربوط به آن را
110
00:05:04,639 –> 00:05:06,880
از جدول موج میخواند و اکنون میتوانیم
111
00:05:06,880 –> 00:05:10,639
شاخص خود را
112
00:05:10,639 –> 00:05:12,960
پس از افزایش شاخص افزایش دهیم تا
113
00:05:12,960 –> 00:05:16,000
آن را به محدوده 0 برگردانیم. به
114
00:05:16,000 –> 00:05:19,280
طول جدول موج و ما این کار را
115
00:05:19,280 –> 00:05:21,840
معمولاً با عملیات f mod در
116
00:05:21,840 –> 00:05:24,479
پایتون انجام می دهیم، می توانیم از عملیات مدولار معمولی استفاده کنیم
117
00:05:24,479 –> 00:05:25,759
118
00:05:25,759 –> 00:05:28,320
و باقیمانده نقطه شناور
119
00:05:28,320 –> 00:05:32,560
یک تقسیم را برای ما استخراج می
120
00:05:33,120 –> 00:05:35,600
کند.
121
00:05:35,600 –> 00:05:39,120
مرزهای جدول موج
122
00:05:39,120 –> 00:05:42,960
اکنون ما شکل موج خروجی خود را تولید
123
00:05:42,960 –> 00:05:45,680
کردهایم و میتوانیم آن را در یک فایل ذخیره کنیم تا به
124
00:05:45,680 –> 00:05:47,759
نوشتن با فایل wav مخفی گوش دهیم، ممکن است
125
00:05:47,759 –> 00:05:52,320
گاهی اوقات مشکل باشد، بنابراین نحو به این صورت است که
126
00:05:52,320 –> 00:05:55,600
نقطه نوشتن موج درست است و اکنون
127
00:05:55,600 –> 00:05:57,360
نام فایلی
128
00:05:57,360 –> 00:06:01,440
که میخواهیم شکل موج خود را به آن خروجی دهیم
129
00:06:01,840 –> 00:06:06,039
، نرخ نمونهبرداری میآید
130
00:06:06,560 –> 00:06:09,280
و اکنون دادههای ما میآید که
131
00:06:09,280 –> 00:06:11,440
میخواهیم در یک فرمت خاص
132
00:06:11,440 –> 00:06:12,720
داشته باشیم، بنابراین
133
00:06:12,720 –> 00:06:15,199
خروجی را
134
00:06:15,280 –> 00:06:16,160
از
135
00:06:16,160 –> 00:06:18,479
نوع
136
00:06:18,960 –> 00:06:21,199
numpy float
137
00:06:21,199 –> 00:06:23,039
138
00:06:23,039 –> 00:06:26,160
32 مینویسیم.
139
00:06:26,160 –> 00:06:29,520
کد
140
00:06:29,520 –> 00:06:35,319
ما خوب است ما علامت خود را گرفتیم بیایید به آن گوش کنیم
141
00:06:41,759 –> 00:06:44,319
خوب که صدا چندان خوبی نداشت
142
00:06:44,319 –> 00:06:45,600
چرا
143
00:06:45,600 –> 00:06:46,400
خوب
144
00:06:46,400 –> 00:06:48,560
یک چیز این است که از درون یابی مرتبه صفر استفاده می کنیم
145
00:06:48,560 –> 00:06:51,199
و چیز دیگر این است
146
00:06:51,199 –> 00:06:53,520
که در حال حاضر صدای کامل را داریم
147
00:06:53,520 –> 00:06:56,000
پس اجازه دهید با اصلاح شروع کنیم
148
00:06:56,000 –> 00:06:58,639
بلندی شکل موج تولید شده خود را
149
00:06:58,639 –> 00:07:01,759
تا این حد تعیین می کنیم که چقدر می
150
00:07:01,759 –> 00:07:05,520
خواهیم خروجی را بر حسب دسی بل کاهش دهیم
151
00:07:05,520 –> 00:07:06,479
و
152
00:07:06,479 –> 00:07:09,680
سپس این عدد دسی بل را به یک مقیاس خطی تبدیل می کنیم
153
00:07:09,680 –> 00:07:12,479
و این دامنه خطی را
154
00:07:12,479 –> 00:07:15,360
در خروجی خود ضرب می کنیم
155
00:07:15,360 –> 00:07:17,440
تا بهره خود را تعریف
156
00:07:17,440 –> 00:07:20,000
کنیم و بتوانیم به راحتی منهای 20 دسی بل اکنون
157
00:07:20,000 –> 00:07:23,919
آن را به دامنه خطی تبدیل می کنیم
158
00:07:24,319 –> 00:07:27,360
و این فرمول به سادگی
159
00:07:27,360 –> 00:07:29,280
وارونگی فرمول شناخته
160
00:07:29,280 –> 00:07:32,319
شده دسی بل است بنابراین دسی بل را
161
00:07:32,319 –> 00:07:35,520
می توان به عنوان لگاریتم 20 برابر
162
00:07:35,520 –> 00:07:39,440
با پایه 10 خطی ما محاسبه کرد. مقدار و
163
00:07:39,440 –> 00:07:43,440
اینجا دقیقاً فرمول معکوس است حالا
164
00:07:43,440 –> 00:07:45,280
بیایید خروجی خود را با این دامنه مقیاس کنیم
165
00:07:45,280 –> 00:07:48,000
166
00:07:48,720 –> 00:07:52,759
و به نتیجه گوش دهیم،
167
00:07:59,360 –> 00:08:01,440
خوب آنها هنوز زنگ نمی زنند و ما
168
00:08:01,440 –> 00:08:04,800
می توانیم به دو روش از شر این تقلب خلاص شویم،
169
00:08:04,800 –> 00:08:07,759
بنابراین می توانیم اندازه را افزایش
170
00:08:07,759 –> 00:08:10,800
دهیم. جدول موج یا می توانیم ترتیب درون یابی را افزایش دهیم
171
00:08:10,800 –> 00:08:12,879
و روش دوم
172
00:08:12,879 –> 00:08:13,840
173
00:08:13,840 –> 00:08:15,039
174
00:08:15,039 –> 00:08:16,000
زمان را با
175
00:08:16,000 –> 00:08:18,560
حافظه مبادله می کند بنابراین به جای اینکه
176
00:08:18,560 –> 00:08:21,520
جدول موجی طولانی تری در حافظه
177
00:08:21,520 –> 00:08:24,800
نگه داریم محاسبات خود را انجام می دهیم بنابراین
178
00:08:24,800 –> 00:08:26,479
179
00:08:26,479 –> 00:08:29,599
برای بدست آوردن نتیجه مشابه زمان محاسبات را می گیریم
180
00:08:29,599 –> 00:08:32,719
و به این حالت خطی می گویند. درون یابی
181
00:08:32,719 –> 00:08:35,039
و همین الان این کار را انجام می دهیم،
182
00:08:35,039 –> 00:08:37,760
ما قبلاً کد خود را کمی به هم ریخته ایم، بنابراین اجازه
183
00:08:37,760 –> 00:08:41,440
دهید یک تابع جداگانه برای
184
00:08:41,440 –> 00:08:44,240
درون یابی خطی
185
00:08:44,240 –> 00:08:47,760
بنویسیم این خط را فرمان دهید و بنویسید
186
00:08:51,040 –> 00:08:53,120
و این دو آرگومان است که
187
00:08:53,120 –> 00:08:56,320
برای درون یابی خطی نیاز داریم،
188
00:08:56,320 –> 00:08:59,600
پس بیایید این تابع را بنویسیم.
189
00:09:00,000 –> 00:09:02,080
ما می خواهیم در اینجا به آن برسیم،
190
00:09:02,080 –> 00:09:04,399
یک آرایه در حافظه با مقادیر داریم و
191
00:09:04,399 –> 00:09:07,519
یک شاخص در آن آرایه داریم که یک
192
00:09:07,519 –> 00:09:11,120
ممیز شناور است، بنابراین کاری که می خواهیم انجام