Тёмный
WolfSound
WolfSound
WolfSound
Подписаться
WolfSound enables everybody to learn about audio programming.

My name is Jan Wilczek and I am an audio programmer and researcher. Welcome to WolfSound!

WolfSound's mission is to provide high-quality, informative, and entertaining videos, articles, and courses on how to process sound by exploring mathematics, applying algorithms, and creating code in various programming languages.


Why C++ sometimes sucks (17 reasons)
36:21
Месяц назад
Top 5 Languages For Audio Programming
15:46
9 месяцев назад
C++ Pointers: The Definitive Guide
1:05:37
10 месяцев назад
Комментарии
@allexandrevieira4372
@allexandrevieira4372 22 часа назад
How's the market for audio programming? I mean salary wise and number of opportunities wise. Just came across your videos, and I am kind of mesmerized by the whole thing!
@sudeepchandra9455
@sudeepchandra9455 День назад
are there any uses for other form for convolution than FULL mode ?
@Lematidas
@Lematidas 3 дня назад
Thank you for this video! very helpful
@frankjamesbonarrigo7162
@frankjamesbonarrigo7162 9 дней назад
Supercollider doesn’t have single sample feedback, but the pattern system is awesome
@TheGmr140
@TheGmr140 13 дней назад
Nice audio info 😊
@KristianDjukic
@KristianDjukic 13 дней назад
one more time
@olilarkin
@olilarkin 16 дней назад
Great! I am just getting into vcpkg
@WolfSoundAudio
@WolfSoundAudio 16 дней назад
Wow, great to hear from a Pro like you, thanks 😉
@nextstudiodev
@nextstudiodev 16 дней назад
Very interessting approach.
@WolfSoundAudio
@WolfSoundAudio 16 дней назад
Thanks 😉
@WolfSoundAudio
@WolfSoundAudio 16 дней назад
☕Did I help you with this video? Consider buying me a coffee at www.buymeacoffee.com/janwilczek Thanks!
@anthonybeckett352
@anthonybeckett352 16 дней назад
Great video, will surely be helpful in a future project. The videos you're doing here and on the JUCE channel are great.
@WolfSoundAudio
@WolfSoundAudio 16 дней назад
Thanks a lot, Anthony! 🙂
@POGRetroModernGaming
@POGRetroModernGaming 16 дней назад
Work for Windows app using kotlin???
@IIoWoII
@IIoWoII 21 день назад
Your explanation is good but please get a lapel mic.
@smarthumanism3221
@smarthumanism3221 25 дней назад
A very good, intuitive insight you're explaining very kindly!
@TheGmr140
@TheGmr140 27 дней назад
Nice i like to have a DAW one day 😊😊
@_Mati__
@_Mati__ 28 дней назад
Cześć Jan! Masz może na kanale odcinek jak zacząć działać w audio programmingu? Jakieś pierwsze projekty, które warto robić na początku? Albo, polecasz jakieś książki, które są wartę uwagi? Bardzo by mi pomogły odpowiedzi na te.pytania :D
@WolfSoundAudio
@WolfSoundAudio 27 дней назад
Polecam to: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-siZokw9tCUg.html
@_Mati__
@_Mati__ 27 дней назад
Dzięki ❤
@5imian
@5imian 28 дней назад
great list. I had the Computer Music Tutorial, Design Patterns, Clean code, but not several of the others. Treasure Trove of resources right here.
@WolfSoundAudio
@WolfSoundAudio 27 дней назад
Glad to hear that!
@ilikegeorgiabutiveonlybeen6705
@ilikegeorgiabutiveonlybeen6705 29 дней назад
dawe rowland
@przekladanki
@przekladanki 29 дней назад
Nice talk! Thanks! 👌
@agent007asdfgh
@agent007asdfgh Месяц назад
Hi
@ovi1326
@ovi1326 Месяц назад
Speaking from experience - doing stuff on the audio thread is a dantean experience in rust. It's definitely not for beginners. So you know like in C/C++ you can prealloc an arena or maybe an object pool and just use it? In rust custom allocators are unstable and prepare yourself for wrapping every single one of your objects in MaybeUninit. Shared mutable state is kinda unavoidable in audio - hence you will end up using RefCell or UnsafeCell more than a healthy amount. Slice accesses are bound checked unless the compiler can prove that it's impossible to get out of bounds, So you either go with processing every sample in a foreach loop using maps and zips or have to agree to making a wrapper type around a raw pointer that overloads the [] operator which is a footgun waiting to fire (rust is way more strict about aliasing than c++). And the solution is to actually place asserts that will be present in your release build as well, which check if your input and output buffers have the same length - how would one guess that?
@ovi1326
@ovi1326 Месяц назад
nim has been around since 2008, it's been a stable esolang for quite some time
@hlwammoenaing1556
@hlwammoenaing1556 Месяц назад
Thanks for valuable course
@Atezian
@Atezian Месяц назад
Thank you, sir. I was really wondering but I am now set and feel secure in choosing C++
@JianerCong
@JianerCong Месяц назад
😍😍😍😍
@iy908
@iy908 Месяц назад
Many thanks for the video! When the next video is planned?
@WolfSoundAudio
@WolfSoundAudio Месяц назад
In 2 weeks I want to do another Rust livestream 😉
@WolfSoundAudio
@WolfSoundAudio Месяц назад
And in the next 2 weeks probably a C++ one again
@PKJ11
@PKJ11 Месяц назад
Yup
@PKJ11
@PKJ11 Месяц назад
Hi
@razvanrusan9319
@razvanrusan9319 Месяц назад
Regarding what you say at the 42:00 minute mark, I don't seem to actually get that much aliasing for the square and saw on my physical devices. Maybe I need to listen more carefully :)) Anyway, great tutorial series! It was really rewarding to me and I learned a lot of C++, Kotlin and design patterns in general. It's really helpful to someone who's still in college and feeling like college isn't helping enough on the software engineering side.
@heatblazer
@heatblazer Месяц назад
C++ is tying to do all and exceeds in none. I agree and there is even more like 'never use new and delete in modern C++' , obfuscated templates that literally do nothing but mask your code, RVO and copy elision are not guaranteed by many, you can still mix C and C++ code in C++ projects. C has a standard and is easy to use without obfuscation. Also I'd not advice boost on modern C++, it's a mess, boost must go, there are Juce, Qt and Poco nowadays for big projects. I am not familiar with Rust or Carbon but C++ is becoming the new COBOL. I am professionally programming in C++ and it's just not good anymore.
@razvanrusan9319
@razvanrusan9319 Месяц назад
At 47:44, the fact that you said "please don't do anything right now" in such a professorial way was really cool. Leaving in the "mistakes" done when coding (rather than editing them out) really makes this a more genuine experience. Thank you for that!
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Haha thanks! I sometimes like to leave code that does not compile in to show compiler error messages; otherwise people may be unsure why we write things the way we write them. Cheers!
@borges69
@borges69 Месяц назад
Thanks for your detailed analysis for C++ ( mostly bad side) . When I see the Juce sponsorship in the end of the video , it comes to my mind that maybe you can give detailed information about Juce's license management in another video.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
JUCE's license agreement is under development at the moment. Only when things settle down does it make sense to present it. Thanks for the idea! 😉
@marco21274
@marco21274 Месяц назад
So you not very experienced in C++ and got lead developer? I think somebody put you in a bad position.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
How do you define very experienced? 😉 I think it's for my client to judge and they are very happy so far.
@marco21274
@marco21274 Месяц назад
Third party warning are easily surpressed if the includes are system includes. CMake has support for that.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
When you use C++ frameworks you don't have full control over which source files are built with your custom target. JUCE is an example of this: you can run into compilation errors of JUCE's source files when you set the warnings too high for your JUCE app or plugin. That's what I meant with setting warnings just for your project's source files.
@marco21274
@marco21274 Месяц назад
@@WolfSoundAudio, have you changed the warning flags of third-party software? Why are you doing it? Or do you speak about the header files from the third-party software? Here, the system includes paths are helping because it suppresses the warnings that originate from this header. Or maybe you speak about your build system? Do you use CMake?
@WolfSoundAudio
@WolfSoundAudio Месяц назад
@@marco21274 I'm talking about creating a custom target using custom 3rd party CMake commands and then changing the warning flags of that target.
@marco21274
@marco21274 Месяц назад
@@WolfSoundAudio Okay, so you meant your build scripts. 😉
@Mark-zk7uj
@Mark-zk7uj Месяц назад
my beef with C++ is less with the language itself than the culture surrounding it. too many devs I've worked with treat C++ as ersatz Java, over-relying on virtual functions and dynamic polymorphism as the first and only solution to any given problem. next is the lack of a good dependency management and build system, as you say. I want the build system to be an afterthought, like it is in rust. it downloads, installs, and links all dependencies, no problem. I don't have to munge my way around header files to get templated code to compile, it just works, out of the box, on every platform it is supported on. on that point, I would like true pattern matching to be built in to C++. no, std::variant doesn't cut it, not nearly. it's a pale imitation of what pattern matching is in languages like prolog, ocaml, haskell, i.e. declarative and recursive syntactical destructuring of values. variant just matches on the outermost type, missing most of the expressive power of proper pattern matching.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Who knows maybe we'll get what you're asking for! 🤞
@Mark-zk7uj
@Mark-zk7uj Месяц назад
@@WolfSoundAudio hope so! stroustrup presented a pattern matcher at cppcon several years ago but TMK it was patched together from C macros. I hoped it might at least become the basis for a new standards proposal but I haven't heard anything about it since.
@Scherbakov
@Scherbakov Месяц назад
To me, the ugliest ugliness in the language is macros. It's an extraordinary mess. There's a reason why Stroustrup doesn't recommend it. While it's great flexibility, it can also be a big problem. It also becomes very difficult when you want to use libraries that were created with different build systems. The "Import Export" in modules is also very funny.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Agreed!
@HairyPixels
@HairyPixels Месяц назад
What really can a compiler to do offer defaults and the most fully-featured standard library possible? Even if they recommend defaults and provide a standard library that doesn't mean 3rd party options aren't better and should be used instead. In fact people often complain about the standard library in C++ and recommend other alternatives. Not saying your points aren't problems but I don't think C++ can help you here more than other language. Btw, I'm not a C++ programmer by any means and these problems you mention seem to exist with all compilers, just some more than others.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
The problem with 3rd party is that it's 3rd party 😄
@mattymattffs
@mattymattffs Месяц назад
Sometimes???? Cpp always sucks. We just put up with it because of the control over the code and speed of the final program. Compile time really kills it.
@mattymattffs
@mattymattffs Месяц назад
@@chocolatezt build pipelines are pretty different to me building and testing
@WolfSoundAudio
@WolfSoundAudio Месяц назад
@@chocolatezt A lot of people are complaining about compile times in the Reddit thread: www.reddit.com/r/cpp/comments/1dvdhtu/opinion_which_parts_of_c_i_find_difficultannoying/ I have experienced it myself in that it can be really demotivating and defocusing 😉
@HairyPixels
@HairyPixels Месяц назад
I've used pascal for years which has declaration/definition split in modules where you need to modify the declaration in 2 locations. It's annoying but I like it creates ledgers for the type at least. In other languages I've used like Swift/C# there are no modules or forward declarations and it's all just dumped into files and the compiler figures out how to link it together. The downsides to this are it's slower to compiler since the compiler needs to resolve types and it's kind of messy to have all the code and types mixed together, although practically this hasn't been a problem it's just not as orderly I would say. Hard to say which is best for me personally.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Thanks. I simply prefer to write things once and be done with it especially that source code changes very often.
@marks7787
@marks7787 Месяц назад
what a hidden gem
@AK-vx4dy
@AK-vx4dy Месяц назад
I know about nothing about C++ but here on RU-vid i saw at least few very good presentations(most from some C++ conferences) about co-routines, which even i understood (with code examples)
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Could you link to them please? For me, there's very little on coroutines available; I could not find much personally 😐
@razvanrusan9319
@razvanrusan9319 Месяц назад
I love synthesis, have had multiple attempts at writing a synth, and have some experience with C++ and Kotlin, but I'm only a poor undergrad who has no experience writing cool software projects by himself. Needless to say, I had to pinch myself when I saw that this video series existed. Thank you for making this content!
@TheQxY
@TheQxY Месяц назад
Slow compile time, difficult to set up modern environment, have to learn another language for cross-compilation (CMake), too many ways to do the same thing, etc.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Exactly 😉
@sledgex9
@sledgex9 Месяц назад
Also, I don't understand why dependency management should be part of the language. Strictly speaking it is out of scope.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Thanks! I'm not saying it should be (npm is a nice example of this). But in C++ it's exceptionally difficult compared to other languages.
@foxwhite25
@foxwhite25 Месяц назад
Otherwise the community will create different solutions anyways and you end up with different dependency management software and the hell that is c++ and java dependency management
@foxwhite25
@foxwhite25 Месяц назад
That is like saying standard library should not be a part of a language it makes no sense, people are going to need it so you might as well create a central and stable one
@WolfSoundAudio
@WolfSoundAudio Месяц назад
@@foxwhite25 Agreed on the point that 3rd party package managers can either evolve too fast in their API (like Conan) or can stop being developed. With standard stuff it's less likely to happen.
@sledgex9
@sledgex9 Месяц назад
I really don't understand the anger with header/source split. I get it only when the objection revolves around using the preprocessor. But the split is beneficial in 2 areas that I find helpful in practice: 1. The header gives you a helpful summary/overview of the class. It helps with readability because you are onboarded quickly when you understand the shape of the class at once glance. It also helps with maintainability because it outlines the shape of the class and lets you better think about refactoring it when looking only at the outline. 2. Sometimes definitions can be lengthy. You might need to split the definition of methods into two source files to help with maintainability. Also this might be a code smell if you have many methods are too long. PS: Modules are heralded as the bane of headers but in actuality modules also support the split between declaration and definition. However, they get rid of the preprocessor which is the actual bad thing about headers.
@AK-vx4dy
@AK-vx4dy Месяц назад
Split has sense only when it is used as binary blob later mostly for libraries (way to save compilation time/space in the past). Even TurboPascal had it in one file without problem, C++ should support old C ways but should have something better (modules?) decades ago.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Thanks for your feedback, I definitely agree with point 2 😉 I'm not sure if modules will fix things because there are still too few projects supporting them unfortunately...
@mattymattffs
@mattymattffs Месяц назад
Because header files should just be auto generated. It's noise.
@philiphugoofficial
@philiphugoofficial Месяц назад
I can see how it can be perceived as beneficial especially if you're used to it, but I'd rather have half as many files to keep track of.
@HairyPixels
@HairyPixels Месяц назад
Having to update declarations in multiple places is annoying I think we can all agree. I've used pascal for ages now which has modules but you still have the duplicate function declarations. It's not a big problem in the scheme of the things but it's a point of friction for sure. What you gain though is a nice ledger of types and clear separation between code and types which is easy to browse.
@XperienceSoundDesign
@XperienceSoundDesign Месяц назад
i have a prototype of my vst, its already being used in the chicano hiphop scene. CAN I GET IT BUILT ON MY OWN ENGINE.
@user-fm8hq3fm2d
@user-fm8hq3fm2d Месяц назад
Sine 2:35 Triangle 3:18 Square 4:36 Sawtooth 5:31 Pulse 7:19
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Thanks!
@MECHANISMUS
@MECHANISMUS Месяц назад
Linting problem is a compile languages problem. Can't be fixed. If Rust lives long enough it too is gonna have a pile of style guides from all the lovely ends of the universe. It seems your mic picks up some background or side crackling events. Which is very confusing at moments.
@WolfSoundAudio
@WolfSoundAudio Месяц назад
Thanks, that's interesting: are there alternative style guides for Rust besides the official one? Thanks for the mic remark, I’ll fix it the next time 😉
@MECHANISMUS
@MECHANISMUS Месяц назад
@@WolfSoundAudio IDK about Rust standards. But I mean it's still a baby. When it's a mastodon like C++ some decades from now most probably it'll have a ton of different standards just the same.
@TheQxY
@TheQxY Месяц назад
Lol Go solved this issue :p
@WolfSoundAudio
@WolfSoundAudio Месяц назад
@@MECHANISMUS Rust has a language convention built into the language. You get compiler warnings by default if you don't follow their style guide 😉
@WolfSoundAudio
@WolfSoundAudio Месяц назад
@@TheQxY Could you elaborate? I'm not very familiar with Go 😉