Comments (5)
Hey @Necrospasm, it sounds like you may be not be using WaveformImageDrawer
directly.
Please refer to this example here:
https://github.com/dmrschmidt/DSWaveformImage#waveformimagedrawer---creates-a-uiimage-waveform-from-an-audio-file
On macOS, it'll create an NSImage
instead of a UIImage
.
If you run into problems with this approach, please let me know with the specifics and I can try to help :)
from dswaveformimage.
Hello @dmrschmidt, thanks for your reply. I did try that example before but for some reason it's not working for me. It's returning blank or errors out that the image is nil.
This is the code that I'm using :
let waveformImageDrawer = WaveformImageDrawer()
waveformImageDrawer.waveformImage(fromAudioAt: URL(fileURLWithPath: filenamePath), with: .init(
size: NSSize(width: 80, height: 45),
style: .filled(NSColor.black),
position: .top)) { image in
// need to jump back to main queue
DispatchQueue.main.async {
appData.generatedThumbnail = (image?.tiffRepresentation)!
}
}
I tried various variations of the above code. I essentially don't need to push the image to a view to be displayed but to assign it to a data variable (@published var generatedThumbnail = Data()) so that I can save the image to a db blob (I know it's not the best approach but to my defence, it's just an 80x45 :P ) instead via a function DBManager.shared.addMedia(mediaThumbnail: appData.generatedThumbnail)
from dswaveformimage.
Since native macOS support was only added recently, I just double checked that this code really works on macOS in the latest version. And it does work for me in the example app.
So let's try debugging this step by step.
- If you check out this repo, try and run the macOS example app.
- Once that works, open the
ContentView
- replace its
body
with the following code
@State var image: NSImage?
var body: some View {
VStack {
if let image {
Image(nsImage: image)
} else {
Text("no image")
}
}.onAppear {
let waveformImageDrawer = WaveformImageDrawer()
waveformImageDrawer.waveformImage(fromAudioAt: audioURL, with: .init(
size: NSSize(width: 80, height: 45),
style: .filled(NSColor.black),
position: .top)) { img in
// need to jump back to main queue
DispatchQueue.main.async {
self.image = img
}
}
}
}
That should give you this exact result:
Once you have that working, replace the audio file with the one you are trying to use. If that still results in nothing drawing, let's take it from there.
from dswaveformimage.
Your code worked and that got me thinking why it wasn't working in my project as the code is for the most part identical. So I created a new view, pasted your code and worked too. Then after about an hour scratching my head, I changed this line :
@published var generatedThumbnail = Data()
to
@published var generatedThumbnail: Data = Data()
and it worked. Not sure why though but maybe it will help someone else too. The only issue I'm having is that the first time i use the function, it doesn't generate anything. The second time running the function it does (without closing the app). Thank you so much for your help mate this is an awesome project.
from dswaveformimage.
Interesting and very obscure. Glad you found the culprit :) Have a great week!
from dswaveformimage.
Related Issues (20)
- Wavefrom form Data in SwiftUI HOT 7
- WaveformLiveView for Local Path HOT 13
- There's many different ways this could be achieved. HOT 3
- Fatal error HOT 3
- Current amplitude HOT 1
- Empty audio not displayed even with Should Draw Silence HOT 6
- Compile error in Xcode 15 beta. HOT 2
- Missing Pause Functionality HOT 1
- -11800 Error code when generation samples on iOS 17 beta HOT 10
- mp3 File not support HOT 8
- xcode 15 not support. Stored properties cannot be marked unavailable with '@available' HOT 1
- Striped style with gradient HOT 2
- Stored properties cannot be marked unavailable with '@available' HOT 3
- Stored properties cannot be marked unavailable with '@available' HOT 1
- Thread 1: EXC_BAD_ACCESS (code=2, address=0x2829857c4) HOT 1
- WaveForm Flickering HOT 2
- Extra argument position in call error in MacOS HOT 1
- I need to show loader till complete image generating from audio URL. HOT 2
- Update version in cocoapod HOT 2
- crash in iOS 17 HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dswaveformimage.