-
-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Sample Track Recording Stage One #5990
base: master
Are you sure you want to change the base?
Conversation
🤖 Hey, I'm @LmmsBot from github.com/lmms/bot and I made downloads for this pull request, click me to make them magically appear! 🎩
Linux
Windows
macOS🤖{"platform_name_to_artifacts": {"Linux": [{"artifact": {"title": {"title": "(AppImage)", "platform_name": "Linux"}, "link": {"link": "https://output.circle-artifacts.com/output/job/a63b2a2d-f02b-4b83-8235-cdb92f29af95/artifacts/0/lmms-1.2.0-rc6.1231+gb2f3a1f86-linux-x86_64.AppImage"}}, "build_link": "https://circleci.com/gh/Reflexe/lmms/1626?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}], "Windows": [{"artifact": {"title": {"title": "64-bit", "platform_name": "Windows"}, "link": {"link": "https://output.circle-artifacts.com/output/job/0f86efe9-e3ad-4d7a-9f38-5831d542b9d2/artifacts/0/lmms-1.2.0-rc6.1231+gb2f3a1f86-mingw-win64.exe"}}, "build_link": "https://circleci.com/gh/Reflexe/lmms/1624?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}, {"artifact": {"title": {"title": "32-bit", "platform_name": "Windows"}, "link": {"link": "https://output.circle-artifacts.com/output/job/c724e479-cedb-48eb-affc-ba13fa6ce6fc/artifacts/0/lmms-1.2.0-rc6.1231+gb2f3a1f86-mingw-win32.exe"}}, "build_link": "https://circleci.com/gh/Reflexe/lmms/1628?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}, {"artifact": {"title": {"title": "32-bit", "platform_name": "Windows"}, "link": {"link": "https://ci.appveyor.com/api/buildjobs/m58xebqefwmpqok0/artifacts/build/lmms-1.3.0-alpha-msvc2017-win32.exe"}}, "build_link": "https://ci.appveyor.com/project/Lukas-W/lmms/builds/44344781"}, {"artifact": {"title": {"title": "64-bit", "platform_name": "Windows"}, "link": {"link": "https://ci.appveyor.com/api/buildjobs/2b35vlj7jhr3ov4a/artifacts/build/lmms-1.3.0-alpha-msvc2017-win64.exe"}}, "build_link": "https://ci.appveyor.com/project/Lukas-W/lmms/builds/44344781"}], "macOS": [{"artifact": {"title": {"title": "", "platform_name": "macOS"}, "link": {"link": "https://output.circle-artifacts.com/output/job/b8b29d25-eaf5-4b78-a156-eaec12fed67a/artifacts/0/lmms-1.2.0-rc6.1231+gb2f3a1f86-mac10.14.dmg"}}, "build_link": "https://circleci.com/gh/Reflexe/lmms/1627?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link"}]}, "commit_sha": "b2f3a1f86e95abb4f1565b7be86e69187028d028"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm still going to review this with more care when I get home, but decided to take a peak at it from my phone and did a first pass review just for fixing code style (stuff like explicit blocks for one line ifs, spacing, camelCase variable names). Added all as suggestions if you'd like to just batch commit them.
Is there any reason you decided to use a braced-init-list instead of the expression-init-list for those new members?
My initial comments:
|
@PhysSong You are right. I forgot to remove it before pushing. |
Fully agree with doing backends 1-by-1. SDL is a good start since it's available everywhere and is the default, so recording will work ootb for most users. |
I compiled and ran this PR today on Linux and it seemed to work pretty well for me. Used the SDL backend (with pipewire), recorded a bit of Guitar music. Things that worked for me:
Things that did not work for me:
I think lmms tries to save the sample track, but it has no associated file name. See Another feature that would be really nice is if I had a way to save the sample track I recorded with lmms (maybe I decide I need it as an extra wav/mp3/something or want to post-process it somewhere else). All in all: A big plus from my side! Looking forward to seeing this feature integrated in lmms once it's done! |
@sebageek Thanks for the feedback. I will look into both. In any case. feel free to open an issue about being able to save individual Samples (if there isn't one open already).
|
Hey @Reflexe, nice to hear that it was helpful && that the second issue is easy to fix! I also opened #6022 for the feature request. Regarding the first issue: The record button apparently dates back to a stub implementation in 2008 and is only now appearing as it checks if the current audio backend is implementing capturing. So, how about using this button for its original intention? It could just allow the user to record samples without any other track playing (essentially the same as the two record buttons in the piano roll). On the other hand while I could imagine this functionality useful.. if this is not needed I'd opt for removing the button. |
I think you should remove |
I have compiled this branch ... I am about to PR that fix Issue #4668 , but also changes some things how capture works in goal to enable input capture callback only if needed. Also see my questions on Discord ... |
Now recording is working if merge this branch over my capture branch: RecordingStageOne.mp4Is this correct? |
4a62327
to
c14a357
Compare
Rebased on master, remove apply master gain related changes. |
c14a357
to
6158e76
Compare
I think at some point we should switch from set/clear record to a proper record button but that's for the future IG |
d01abd2
to
e5c795c
Compare
Tried doing this today, sadly it isn't working for me on Arch. When I place down a sample section then right click it, I get no "set/clear record" option at all. Would be really simple if I could grab the exe's in some way but none of the .exe's can be downloaded, same story with the appimage file. 2021-09-21.17-07-36.mp4 |
@Mayravixx That version doesn't contain the code from this PR - it's instead the latest |
audioPort as nullptr by default.
"played" (recorded).
actual data starts after that.
instead of hacking sampleBuffer ()->startFrame (). That solves a bug with `startFrame ()` being negetive in recording some cases.
This noise generator doesn't work properly when multiple noise sources are being generated simultaneously.
…#7236) ## Add support for "factorysample:" prefix Add support to upgrade files with `src` tags that are prefixed with "factorysample:". ## Fix "bassloopes" typo Fix projects that still reference files with the typo "bassloopes" in their name. The upgrade is implemented in its own method because it is unrelated to the BPM renaming even if it is technically very similar in its solution. Introduce the helper method `mapSrcAttributeInElementsWithResources` which replaces the `src` attribute in elements with resources (samples and AFP) if it can be found in a map.
When launching the wine VST process various wrappers may be involved, when they exit the VST process becomes orphaned. This breaks the PollParentThread mechanism which is responsible for cleaning up processes in case of a crash. Because of this 64bit VST process exits prematurely, in other words 64bit VST is currently broken in a typical wine configuration. A solution suggested by Lukas W is to set the PR_SET_CHILD_SUBREAPER flag which makes the kernel reparent such process to lmms and PollParentThread then works as intended. Co-authored-by: Lukas W <lukaswhl@gmail.com>
* Add architecture to macOS cache keys * Only save Homebrew cache if lock file has changed
@messmerd, what are your audio settings? What latency is set there. Also, to reduce any human latency: can you please try to record the metronome sound itself coming from the speakers? |
I tried to reproduce a crash but couldn't. I used to get a crash before but strangely it disappeared. Can anyone check if recording still crashes? |
If i get a confirmation, I'll merge in 2 days unless someone objects |
As @StakeoutPunch observed and reported on Discord, this feature has a blocker:
Some workarounds have been proposed:
Each come with some major drawbacks (usability, portability/clutter, effort, respectively). |
Prompting users after each recording would be very cumbersome and should be optional if it is implemented. REAPER stores recordings in a global, configurable folder if there is no saved project yet. The file names contain date and time and other things to make them unique. These files are kept until they are explicitly deleted. It is possible to configure the behavior of REAPER, i.e. you can configure where recordings are stored for projects that have already been saved. This way it is possible to have every recording in the project folder from the get-go. Most other DAWs provide several options with regards to working with files, e.g. audio files/samples, MIDI clips, etc:
|
…tage-one Conflicts: * src/core/audio/AudioSdl.cpp
…tage-one Merge origin's master so that the SDL related changes are reflected.
recording.mov
This is the first stage of the Sample Track Recording feature and was intended to only work on one backend (SDL) with no fancy features like looping and visualization.
It has been tested very quickly on my setup with a monitor interface.
Note: the changes are from #4994.