Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    stefanha
    @stefanha:matrix.org
    [m]
    I'm prototyping the mixer controls using QML.
    This morning I worked out a UI design and I'll begin implementing it in Wahjam2.
    This prototype UI is not part of the client yet. But once the QML controls are working I'll hook it up and it should be possible to start using Wahjam2 for basic jamming.
    Stefan Hajnoczi
    @stefanha
    @teamikl:matrix.org I have pushed the code here in case you want to play around with the QML: wahjam/wahjam2@c281497. It can be run with qml qml/session/Test.qml.
    tea
    @teamikl:matrix.org
    [m]

    The Output fader is for sending to server?

    it's a good idea to separate local channel monitor and sending volume.
    one of big confusion in NINJAM UI, local channel effect to monitor only,
    when users ask to down volume more, they down the local channel fader
    not sending volume. they does not care which "volume"
    Output volume can show the actual volume which others will hear.

    stefanha
    @stefanha:matrix.org
    [m]

    tea "Output" is the master volume for monitoring the whole jam. It doesn't affect the upload volume. Thanks for the suggestion, the current prototype let's the user control the local channel upload volume, but I realized it doesn't let them see a different monitoring volume.

    Personally I monitor myself at the same volume as the upload volume, but I know some people like to hear themselves louder.

    tea
    @teamikl:matrix.org
    [m]
    Oh, monitor volume? I had thought because "Stop sending" then sending volume.
    and "Me" was monitor local channels. it's also one of solutions, everyone share volume balance. it's good. (then no remote channel volume fader ?) other solutions are showing how loud others listen your volume. jammr might detect when transmit sound was clipping?
    tea
    @teamikl:matrix.org
    [m]
    I do not like to change monitor volumes too,
    because volume balance on server side recording.
    everyone share the balance is the best. but sometime need the options for trolls.
    Stefan Hajnoczi
    @stefanha
    I think I'll move the Send/Admin/Leave buttons away. They can be in another part of the UI. They aren't really related to the mixer :).
    @teamikl:matrix.org In the latest prototype each channel has a "..." button that expands a panel where you can adjust the gain and pain. So it's possible to change the volume of both local and remote channels.
    @teamikl:matrix.org Yeah, for years I have tried to explain that it's best not to have remote channel volume so that everyone, including the server, hears the same mix.
    But I think some people just expect to have this, so I will add it.
    1 reply
    I'm thinking about sending user's volume adjustments back to the server so the server can apply an average volume for each channel. That way the recorded jam mix will sound okay.
    tea
    @teamikl:matrix.org
    [m]
    I have a question, how VUmeter will have stereo,
    its split the bar or two slots each channels?
    stefanha
    @stefanha:matrix.org
    [m]
    tea Wahjam2 will support two options: mono channels with a plan control, and stereo channels with a double bar VU meter.
    Stereo channels are necessary when the input audio already had stereo information applied to it (pan).
    Mono channels with pan control are more flexible because the pan position can be adjusted.
    The mixer will have eventually have a button for adding local channels and each local channel will have a input routing listbox so the user can select which sound card channel to send into the local channel.
    tea
    @teamikl:matrix.org
    [m]
    stefanha: sorry for slow response, I wonder the point was how stereo VUmeter is shown. not about add local channel. it's stereo channel Left/Right, in QML VirticalBar ? then stereo will show two VirticalBar components ? because the component have solid property only "value" that does not have left/right info.
    tea
    @teamikl:matrix.org
    [m]
    by reading the QML code, how about that implement those local/remote channels as ModelView, like Sesssion.qml use ListModel. I wish I can explain this by code, just note the idea at this moment.
    tea
    @teamikl:matrix.org
    [m]
    my status was stuck on build pkg-config things.
    today, I researched about eco system for c++ project.
    Qt6 supports package manager Conan,
    but unfortunately other package status were not mature/stable, yet.
    Stefan Hajnoczi
    @stefanha
    @teamikl:matrix.org In the prototype I'm using a custom vertical bar component: https://github.com/wahjam/wahjam2/blob/main/qml/session/VerticalBar.qml. I think that visually it might be nice to integrate both bars into a single UI component. That would be easy to do.
    @teamikl:matrix.org I asked myself the same question about model/view vs event callbacks that add components to the mixer container. At the moment I think it's easiest to use callbacks + add components to the mixer container instead of model view. I'm not sure Qt's model/view approach with a data access method based on roles (https://doc.qt.io/qt-5.14/model-view-programming.html#model-classes) is useful for Local/Remote Channel objects.
    Would we use model->data(index, Qt::UserRole) to get access to the Local/RemoteChannel object and then invoke methods on it directly?
    2 replies
    Or would we define new custom Qt::UserRole values for each field of data associated with a Local/RemoteChannel? That seems like a lot of extra code for not much benefit.
    Stefan Hajnoczi
    @stefanha
    So in the end I decided that Qt's Model/View is most suitable for data models (text, lists, trees), but not for active objects like Local/RemoteChannel that the UI needs to interact with heavily.
    What do you think?
    @teamikl:matrix.org Cool, I'd love to hear what you find about Qt6. If it's possible I would like to use it but I'm not sure if it is easily available and mature enough on all platforms. Qt5 is okay for now but I loved having new Qt features :).
    1 reply
    tea
    @teamikl:matrix.org
    [m]

    The advantage of Model-View is, remove dependency from view.
    I think a module design topic.

    e.g. if js or cpp code had direct access to VirticalBar
    the code assume VirticalBar's properties,
    when you want to change component, then have to modify code together. (in that case, View has dependency)
    Model-View is a flexible that point, ideal situation is change the view-component only and same business logic code works.

    I understand that cost and benefit too, so it's just note at this moment.
    There are several issue for performance, I did not test this yet.
    I had research about VUMeter component,
    that may require some optimization for the animation.

    but not for active objects like Local/RemoteChannel that the UI needs to interact with heavily.

    Yes true, this point is an important.
    an exists Model-View which Qt provide may be the limitation
    for the dynamic use case, like nested-channels etc.
    but I still think benefit of Model-View,
    need new model which fit to our use case.
    (agree: your point, it's the cost and not needed in this stage yet)

    Pros: it's reduce the cost of change view component.
    Cons: it's increase cost when the model did not fit.
    --> can't apply easily for uncertain use cases

    tea
    @teamikl:matrix.org
    [m]
    let me explain a bit, I did not mean the system is mature or not.
    it's a mature as Qt adopt it. but packages we need were not yet.
    stefanha
    @stefanha:matrix.org
    [m]

    tea Cool, I will take a look at Conan.

    The chat box can use model/view. It works well there.

    PortAudio recently moved to GitHub, did some cleanup, and released a new version (after years of silence!). I think the project has a little more momentum now.
    1 reply
    stefanha
    @stefanha:matrix.org
    [m]
    tea Qt6 has raised operating system requirements to Windows 10 and macOS 10.14. Currently Wahjam supports older operating systems (Vista and macOS 10.13). By the time Wahjam2 it's ready for release this should be okay though.
    tea
    @teamikl:matrix.org
    [m]

    There are easier ways to expose C++ objects, however
    it has pros/cons by which model to choose.

    There are 3 different use-cases.

    • Local/Remote channels ... list of QObject in C++
    • SessionList ... custom model
    • chatbox ... list model in QML

    about SessionList I found
    QJsonArray could be pass as the model directly
    I'm not sure which version of qt support this,
    as i know previous version required JsonListModel

    Stefan Hajnoczi
    @stefanha
    @teamikl:matrix.org Cool, thanks for researching that! There are many ways of doing things in Qt/QML :).
    For now a lot of the client is still written in C++ and I think it will stay like this for some time because the network protocol and audio code is a little more natural in C++ than JavaScript (where we would need to call into C++ anyway for audio encoding/decoding, etc).
    The session list could be done almost completely in QML/JavaScript, but since the rest of the client is in C++, I've taken the approach of keeping the client in C++ and only the UI in QML. I can imagine implementing the REST APIs in QML/JavaScript instead of in the client, although that would make it hard to use the code from a non-QML client in the future (e.g. a bot or a different UI technology).
    tea
    @teamikl:matrix.org
    [m]

    LGTM that client code in C++, reusable.

    I have one more reason that wanted to share.
    it's a known issue in dynamic scripting language,
    it often problem lack of compile time type check,
    JS code easy to make runtime error, like typo field/property names.
    that C++ can detect before compile or static code check.

    in dynamic scripting language, avoid such easy mistake
    by unit test and coverage. or using static code check tools with type annotations.
    if View had a code then it became hard to make the test code.

    NOTE: Qt also has "qmllint" I had not use this yet. will be my next research

    stefanha
    @stefanha:matrix.org
    [m]
    Neat, I haven't seen qmllint yet either!
    Stefan Hajnoczi
    @stefanha

    @teamikl:matrix.org I pushed my latest work on audio settings and the lobby (list of jam sessions). The client is not functional yet but it's getting closer.

    I'll implement the private jam creation UI next. Once private jams can be created I'll start working on the main jam session UI.

    stefanha
    @stefanha:matrix.org
    [m]
    tea Some progress on the user interface :)
    The chat box is not very visible yet, I'll need to give it a border and a different color.
    stefanha
    @stefanha:matrix.org
    [m]
    @tea The user interface is slowly coming together:
    stefanha
    @stefanha:matrix.org
    [m]
    tea: Audio playback is working and the metronome VU meter is animating. I hope to make more progress on the core jamming functionality this week.
    stefanha
    @stefanha:matrix.org
    [m]
    tea: Here is how I ended up implementing local channel UI controls without QML's Models:
    wahjam/wahjam2@84b9576
    tea: LocalChannel.qml is what Models would call the "delegate" component. Coding it like this works quite nicely and I didn't see a better way to do it using QAbstractModelItem or similar classes.
    stefanha
    @stefanha:matrix.org
    [m]
    tea: I had the first real jam using the new client today! 🥳