Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
I was going to try this feature - the latest Aural build that you include in the package over at Github crash with each launch. Would you like to have the crash report sent over via Github?
I read this too late. You received a report yesterday(apologizes all around). I'll go and close that one up - or you can close it as resolved or something :) Also, I've been dabbling with what I'd like to see Aural have for a skin/theme - it's been through some various iterations(still all over the place) and I think I might have misunderstood the concept as a whole. I honestly do not know what my "WinAMP" skin will be to you :p

No worries about the crash report. I don't have a reputation to maintain or care about :D I'm doing this solely for fun and learning. Close it if you can (I don't even know how). In the future, if you have trouble with crashes, a good fix to try is to delete that config file (.json) and restart the app.

In fact, Winamp was my main inspiration for this app. I have used and loved Winamp since my college days (a long time ago). I am yet to find anything on the Mac platform come even close to Winamp's simplicity and ease of use. My goal here was to create a Winamp substitute on Mac with easy to use keyboard shortcuts. You'll notice that Aural player offers plenty of keyboard shortcuts for player actions.

Thanks again, for taking interesting in this. BTW, I don't know if you noticed, but I updated the main player control button icons. They look so much better now ! Almost like they traveled 20 yrs into the future.
[doublepost=1500019283][/doublepost]
One thing I'd like Aural to possibly have is a recursive way of looking at iTunes' Music folder.

I implemented this feature yesterday. Not specifically the iTunes folder, but any folder. You can open a folder with the + button, or drag a folder into the playlist, and it will add all the supported files.
[doublepost=1500020261][/doublepost]
It looks very nice music player app.
Any chance to make it available and run on Mavericks?

Hey friend, I tried to build my project with OS X 10.9 (Mavericks) as the deployment target. Unfortunately, it is not going to work, because I am using a framework called AVAudioEngine, which was introduced in OS X 10.10. So, I guess my app requires OS X 10.10 or later.

I'm real sorry :(
 
For others who would love to start programming on the Mac, could you give us some advice? How did you learn so quickly? Was there an example project you started with? Thanks. :)
 
  • Like
Reactions: 0002378
For others who would love to start programming on the Mac, could you give us some advice? How did you learn so quickly? Was there an example project you started with? Thanks. :)

Hi,

To answer your question, two things helped me greatly with this project:
1 - I have a pretty extensive background in object-oriented programming in Java. Swift and Java have some similarities and a great many differences. But, the bottom line is ... I have many years of object-oriented programming experience. Without those years, this project could not have materialized.
2 - I have a great interest in, and some knowledge of, music/sound synthesis. I have created my own (electronic) music using FL Studio, and have learned the basics of sound synthesis. I actually had a physical Roland synthesizer that I played with, to learn the basics. So, I understand the concepts behind digital signal processing (DSP), and how it is used to manipulate sound, which also helped with this project.

The thing that matters most is - what is your background ? Do you understand computers, operating systems, file I/O (input/ouput), memory, concurrency/multitasking ?

I don't think there was an example project. My approach was ... "I love music. Let's understand how mp3 players do their thing. Let's get started coding in Swift, and if/when I get stuck, I can look it up ... and let's see how far we can get." To be honest, I didn't think I would be able to get this far with this project. But, Apple's SDKs (code that they wrote that you can use) did most of the work. I just had to understand how different pieces work and tie them together.

I was able to dive head first into coding, without really learning Swift from scratch, because of my Java experience. If you don't have any programming experience, I'd recommend books like "Swift OS X Programming for Absolute Beginners" or "Swift for dummies", and this is not to insult you ... I love the dummies series myself. It explains things from scratch with a lot of simple hands-on projects.

If you dive into programming without learning computer fundamentals, you can get stuff done, but you'll find that you constantly run into brick walls because you're not able to understand why something is going wrong. And believe me, stuff will go wrong ... all the time, even if you've been doing it for 30 years :)
 
Added new compact view options (ability to toggle playlist/effects views)

Aural-playlistOnly.png


Aural-effectsOnly.png


Aural-compact.png
 
I'm currently working on adding a real-time visualization (vertical bars) ... made some progress, but don't have a firm grasp on it yet. I'm looking forward to the day when I'll have this ready ! It is quite involved !
 
I'm currently working on adding a real-time visualization (vertical bars) ... made some progress, but don't have a firm grasp on it yet. I'm looking forward to the day when I'll have this ready ! It is quite involved !
That sounds like a really interesting challenge - can you share some details on how you were able to analyze the real-time audio if / when you get it working?
 
  • Like
Reactions: 0002378
That sounds like a really interesting challenge - can you share some details on how you were able to analyze the real-time audio if / when you get it working?

Hey, yes, it is very interesting ... it is heavily mathematical in nature. The visualization process basically consists of the following high level steps:

- Install a tap on the audio output line (in my case, an AVAudioEngine mixer node), to tap the data coming out
- Set up a callback within the tap, so that your data analysis unit can be notified whenever new data is available (i.e. many times a second)
- When new data is received, perform what's called a Fast Fourier Transform (FFT) ... Apple provides a framework to do this stuff (thank God for that !). This really does need to be fast, if you're doing real time analysis.
- The FFT analysis converts time-based samples to frequency-based samples. In other words, the data you get out of FFT is in terms of frequency bands and the magnitude of sound at each such band.
- Using the frequency/magnitude data, render some sort of visual representation. This could be simple vertical bars, one for each frequency band, or circles that dance to the beat, or some sort of funky particle emitter.

The key, however, is efficiency. If the audio tap introduces a latency, or your computation/rendering are not able to keep up, there will be a definite lag in your visualization ... the view will look like me doing a salsa dance ... always a few steps behind.
 
I updated it to Swift 3 and recompiled it with Xcode 8.3.3.

It works!
script>
can you give some guidance how to update code to swift 3 i got some errors

Code:
self.underlyingQueue = DispatchQueue(label: queueName, attributes: [])

Code:
switch queueType {
        case .main: self.underlyingQueue = DispatchQueue.main
        case .global: self.underlyingQueue = DispatchQueue.global(priority: 0)
        case .custom: self.underlyingQueue = DispatchQueue(label: DispatchQueue.defaultCustomQueueName, attributes: [])
        }

Code:
for (freq,gain) in eqBands {
            eqBandsDict[String(freq)] = gain as NSNumber
        }

Code:
timer!.setTimer(start: DispatchTime.now(), interval: intervalNanos, leeway: intervalNanos / 10)
Code:
let objects = info.draggingPasteboard().readObjects(forClasses: [URL.classForArchiver()!], options: nil)

Code:
task_info(mach_task_self_,
                task_flavor_t(TASK_BASIC_INFO),
                task_info_t($0),
                &count)
 
The snag here is that the project has a class called DispatchQueue - which kind of clashes with the native Foundation's DispatchQueue
can you give some guidance how to update code to swift 3 i got some errors

Code:
self.underlyingQueue = DispatchQueue(label: queueName, attributes: [])

Code:
switch queueType {
        case .main: self.underlyingQueue = DispatchQueue.main
        case .global: self.underlyingQueue = DispatchQueue.global(priority: 0)
        case .custom: self.underlyingQueue = DispatchQueue(label: DispatchQueue.defaultCustomQueueName, attributes: [])
        }

Code:
for (freq,gain) in eqBands {
            eqBandsDict[String(freq)] = gain as NSNumber
        }

Code:
timer!.setTimer(start: DispatchTime.now(), interval: intervalNanos, leeway: intervalNanos / 10)
Code:
let objects = info.draggingPasteboard().readObjects(forClasses: [URL.classForArchiver()!], options: nil)

Code:
task_info(mach_task_self_,
                task_flavor_t(TASK_BASIC_INFO),
                task_info_t($0),
                &count)

One of the snags is that the project has a class called DispatchQueue - which can be confused with the regular Foundation DispatchQueue class. So you've got to be a bit careful.

So for that bit, I did:

Code:
class DispatchQueue {


    var underlyingQueue: Dispatch.DispatchQueue!

    fileprivate static let defaultCustomQueueName: String = "Aural.queues.default"


    init(queueName: String) {

        // Assume custom queue

        self.underlyingQueue = Dispatch.DispatchQueue(label: queueName, attributes: [])
    }


    init(queueType: QueueType) {

        // Intended to be used for main or global queue, but if custom queue, use the default custom queue name

        switch queueType {
        case .main: self.underlyingQueue = Dispatch.DispatchQueue.main
        case .global: self.underlyingQueue = Dispatch.DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive)
        case .custom: self.underlyingQueue = Dispatch.DispatchQueue(label: DispatchQueue.defaultCustomQueueName, attributes: [])

        }
    }
}


// GCD dispatch queue type

enum QueueType {
    case main
    case global
    case custom
}

I'll put it on GitHub later...
[doublepost=1500407463][/doublepost]
I'll put it on GitHub later...

I've put it the Swift 3 version on Github at https://github.com/wilsoncpw/Aural

I've added a note there that says...

This is a Swift 3 port of the Aural MP3 player by 'maculateConception'. The original Swift 2 version can be found at:

https://github.com/maculateConception/aural-player

Please note that I only updated the project to Swift 3. All the design, development and hard work was done by the original developer
 
  • Like
Reactions: 0002378
I updated it to Swift 3 and recompiled it with Xcode 8.3.3.

It works!


Hi colinwill, thanks so much for doing this ! I really appreciate your time and effort. This is going to be very valuable for all devs wanting to mess with it. My Swift 2 version is not very practical for those wanting to be on the cutting edge.

Are you "codebreede" on GitHub ? Did you send me a pull request to update the main branch with your Swift 3 version ?

I wanted to send you a private message on GitHub but they don't allow private messaging. I'm glad I found you here.

In any case, I was going to reply saying that I'd appreciate it if you could keep the Swift 3 version in a separate fork/branch/repo/whatever, because I am unable to develop with Swift v3 (my OS and hardware are outdated). So, I will continue to use/update the Swift 2 repo.

If you want, I can create a fork under my repo, and add you as a contributor. That way, both versions are in one place, and easier for folks to find. And, you can keep working on the Swift 3 version there. Let me know what works for you.

Keep up the good work ! Cheers !

BTW, I've made quite a few updates since you forked my repo. If you want the latest, you'll need another merge.
 
Last edited:
Hi,

Are you "codebreede" on GitHub ? Did you send me a pull request to update the main branch with your Swift 3 version ?

No - I'm wilsoncpw on github. I've got several repos there - most of them are throw-away things I've been experimenting on, though a couple of them - Image Viewer 4 and CWSocketsEx are starting to look quite promising :)

If you want, I can create a fork under my repo, and add you as a contributor. That way, both versions are in one place, and easier for folks to find. And, you can keep working on the Swift 3 version there. Let me know what works for you.

Yes - I think that would be the best. For a start, my Github skills are pretty basic. If you create a Swift 3 fork in your repo I'll re-publish it there
 
Hi,



No - I'm wilsoncpw on github. I've got several repos there - most of them are throw-away things I've been experimenting on, though a couple of them - Image Viewer 4 and CWSocketsEx are starting to look quite promising :)



Yes - I think that would be the best. For a start, my Github skills are pretty basic. If you create a Swift 3 fork in your repo I'll re-publish it there

Actually, here's a surprising development. I'm thinking of upgrading to MacOS Sierra (using the hack), so if that succeeds, I'll start developing with Swift 3 myself. If it doesn't, and I'm stuck with Swift 2, I'll create that fork under my repo.

I'll keep you posted on what happens.
 
This looks like a really nice player to use instead of vlc, can you update it for swift 3, i can't build it on Xcode 8.3.3

Your wish has been granted, Sir. All code in master branch ported to Swift v3.1.

If you create a Swift 3 fork in your repo I'll re-publish it there

Colin, I ported over my code to Swift v3 as well, and updated the master branch with it. I created a separate "swift2" branch for the old code.

I guess we can work on this project independently and watch each other's changes to see if there's something worth merging over from one side to the other ?
[doublepost=1500540053][/doublepost]UPDATE: All code has been ported to Swift 3 (v3.1). Old Swift2 code is now in a separate branch.

Hope this helps some of you who need to work with Swift 3.
 
UPDATE: All code has been ported to Swift 3 (v3.1). Old Swift2 code is now in a separate branch.

Hope this helps some of you who need to work with Swift 3.
 
I'm thinking about the grey backplate; is it going to stay or is there a future edition if this app where it's removed and that windowcontrols are implemented on the player itself? Vertical controls perhaps?

What happened that allowed for Swift 3 to be a thing? Can your MacBook handle greater OS than Yosemite?
 
I'm thinking about the grey backplate; is it going to stay or is there a future edition if this app where it's removed and that windowcontrols are implemented on the player itself? Vertical controls perhaps?

What happened that allowed for Swift 3 to be a thing? Can your MacBook handle greater OS than Yosemite?

The "backplate" is just part of the window frame. I removed the titlebar, so the window controls (x and -) are just image buttons that respond to my code to exit/hide.

What are vertical controls ? Sorry, I'm not a UI guy, so I don't understand UI terminology.

I was concerned that using the Sierra hack (patcher tool) to upgrade to MacOS Sierra would cause problems or just not work ... I was wrong ! Using dosdude1's patcher tool, and crystal clear instructions, upgrading was a breeze, and Sierra works beautifully well !

So, the only thing that changed was my confidence in the upgrade :D And, I'm glad I did it. I like Swift 3 :D Are you ok working with Swift 3 ? The old code is still there too.
 
Wow, you are doing a great job. Yes, this reminds me of Winamp and its simplicity of use. Keep up the great work I am now using it and can't wait to see what else you will add to this project.

:):):):)
 
  • Like
Reactions: 0002378
Wow, you are doing a great job. Yes, this reminds me of Winamp and its simplicity of use. Keep up the great work I am now using it and can't wait to see what else you will add to this project.

:):):):)

Thanks for the kind words, friend ! Glad to know you're liking it. :)

I've tried adding real-time visualization, but it suffers from a serious time lag that would make it unusable :( I haven't given up yet, though.
 
Great work. Nice little programme for dragging a few music files or podcasts to listen to while working, without all the hassle of iTunes. Equalizer works great with headphones.
 
  • Like
Reactions: 0002378
Great work. Nice little programme for dragging a few music files or podcasts to listen to while working, without all the hassle of iTunes. Equalizer works great with headphones.

Thanks for the great feedback :) Nice to know that someone out there is making use of it !
 
I'm thinking about the grey backplate; is it going to stay or is there a future edition if this app where it's removed and that windowcontrols are implemented on the player itself? Vertical controls perhaps?

Hey, I updated the look n feel of the window (and sliders and knobs) ... it is now partly transparent (see screenshots on Github and up above, on this page). Let me know what you think.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.